ggplot use small pie charts as points with geom_point

后端 未结 2 1814
爱一瞬间的悲伤
爱一瞬间的悲伤 2021-02-01 08:19

I would like to make a graph with ggplot as shown below. The idea is to plot \"percentage matches\" between two categorical variables. It is easy to come close by altering the s

相关标签:
2条回答
  • 2021-02-01 09:05

    First, modify your original data frame to have first 6 rows containing original score and last 6 rows contains 1 minus original score. Then added column group containing levels for those two groups.

    temp <- data.frame(Exercise=c(1, 1, 1, 2, 2, 2), 
                       Name=c(1, 2, 3, 1, 2, 3), Score=c(0.2, 0.5, 0.3, 0.9, 1.0, 0.6))
    temp<-rbind(temp,temp)
    temp$Score[7:12]<-1-temp$Score[1:6]
    temp$group<-rep(c("poz","neg"),each=6)
    

    coord_polar() is used to make piecharts from barplot and then facet_grid() to make six small plots. theme() is used to remove axis, facet labels, gridlines.

    ggplot(temp,aes(x = factor(1),y=Score,fill=group)) + 
      geom_bar(width = 1, stat = "identity") + facet_grid(Exercise~Name)+
      coord_polar(theta = "y") +
      scale_fill_manual(values = c("black", "grey")) +
      theme_bw() + scale_x_discrete("",breaks=NULL) + scale_y_continuous("",breaks=NULL)+
      theme(panel.border=element_blank(),
            strip.text=element_blank(),
            strip.background=element_blank(),
            legend.position="none",
            panel.grid=element_blank())
    

    enter image description here

    0 讨论(0)
  • 2021-02-01 09:21

    Using a plot as the shape for a point is tricky. However, you can side step the issue and get very close to your mockup using facet_grid():

    ggplot(temp) + 
      geom_bar(aes(x=1, y=Score), stat="identity") + 
      facet_grid(Exercise~Name) + 
      coord_polar(theta = "y") +
      scale_y_continuous(breaks = NULL) +
      scale_x_continuous(name = element_blank(), breaks = NULL)
    

    enter image description here

    0 讨论(0)
提交回复
热议问题