R:带有饼图和构面网格的ggplot

时间:2015-03-27 08:29:13

标签: r plot charts ggplot2

我真的似乎无法解决相当复杂的问题(从我的角度来看)带注释的小平面网格饼图。我知道更简单的方法来描绘相同的数据(例如没有构面的堆积条形图)。但我确实感觉理解这个特定图表的制作方式对我(或其他任何感兴趣的人)对ggplot2的理解都有好处。

以下是数据:

df <- data.frame(time = c("201501", "201501", "201502", "201502", "201503", "201503"), 
                 factors = c("x", "y", "x", "y", "x", "y"),
                 values = c(0.33, 0.15, 0.36, 0.15, 0.39, 0.18))

我的目的是显示结构随时间的变化,同时巧妙地突出显示包含在x中的变量y。

这是油漆中的预期(非常近似)输出:

enter image description here

而且,嗯,这是我到目前为止所知道的:

  1. 饼图只是geom_bar()但只有coord_polar()
  2. 为避免x尺度上的展示位置问题,我可以在x = factor(1)字符串中设置aes()
  3. 我可以通过aes()字符串中不一定使用的因子来划分网格。因此,facet_grid(time~.) - time变量不会在其他任何地方使用。
  4. 到目前为止,我会避免发布我的结果,因为它们......好吧,非常难过。

    非常欢迎任何线索和技巧。

    更新

    好吧,看起来我自己慢慢到达那里:

     df <- data.frame(time = c("201501", "201501", "201502", "201502", "201503", "201503"), 
                     factors = c("x", "y", "x", "y", "x", "y"),
                     values = c(0.33, 0.15, 0.36, 0.15, 0.39, 0.18))
    
    seq_adj <- seq(from = 1, to = nrow(df)-1, by = 2)
    
    df$val_mod <- ""
    df$val_mod[seq_adj] <- paste(as.character(df$values[seq_adj] * 100), "%(",
                                 as.character(df$values[seq_adj + 1] * 100), "%)", sep = "")
    df$val_mod2 <- df$values
    df$val_mod2[seq_adj] <- df$values[seq_adj] - df$values[seq_adj + 1]
    
    ggplot(data = df, aes(x = factor(1), y = val_mod2, fill = factor(factors))) +
      geom_bar(stat = "identity", position = "stack", color = "black") +
      scale_y_continuous(limits = c(0,1)) +
      coord_polar("y") +
      facet_grid(.~time) +
      geom_text(aes(x = factor(1), y= .5, label = val_mod, vjust = 4.5)) +
      theme(axis.text.x=element_blank()) +
      theme(legend.position="bottom") +
      theme(axis.title.x = element_blank(), 
            axis.title.y = element_blank()) +
      theme(panel.background = element_blank()) +
      theme(legend.title=element_blank()) +
      scale_fill_discrete(labels=c("x","y"))
    

    产生:

    enter image description here

    现在只剩下几个调整 - 饼图圆形轮廓和使切片看起来像变量y的方法是变量x的一部分(或包含在其中)。 我已经阅读了几篇明确说明纹理填充不是ggplot2中的选项的帖子。也许这部分有任何建议吗?

0 个答案:

没有答案