【问题标题】:Bar Chart + Line Graph on One Plot with GGPlot使用 GGPlot 在一个绘图上显示条形图 + 折线图
【发布时间】:2014-07-26 01:55:31
【问题描述】:

我正在尝试制作一个分组条形图...稍作修改。

我的图表有四个“列”:季度、个人、百分比、总百分比。我的数据示例如下所示:

|人 |季度 |百分比 |总百分比 |

|-------- |--------- |------------ |-------------- ---- |

|一个 | 1 | 40% | 50% |

|一个 | 2 | 45% | 50% |

|一个 | 3 | 55% | 50% |

|一个 | 4 | 60% | 50% |

|乙| 1 | 35% | 42% |

等等。

我已使用此代码成功制作了条形图:

ggplot(data=point3, aes(x=Person, y=Percentage, fill=Quarter)) + 
+     geom_bar(colour="black", stat="identity", position=position_dodge(), size=.3)                       
+     scale_fill_hue(name="Quarter") 
+     xlab(" ") + ylab("Percentage") 
+     theme_bw()

但是,我想更改一些内容。首先,我想隔开 x 轴。每人有四个酒吧,我想知道如何才能做到,以便每个人之间有更多的空间。我遇到了麻烦,因为 X 轴不包含任何类型的数字。有谁知道怎么做?

其次,我想为每个人添加一条垂直线,代表他们的总百分比。这样,观众就可以很容易地看到该人哪个季度的表现低于他们的年度平均水平,以及他们在哪个季度的表现超出预期。我在这方面取得了一点成功

geom_point(data=point3, aes(x=Person, y=Total Percentage))

在前面代码的末尾,但这只是在第二条和第三条(中间)之间添加一个点。我通过谷歌找到了mock up of this using a grouped bar chart。这个只有 3 个酒吧,但也许你能明白。我这次遇到的一些问题是,虽然它们的比例相同,但条形图的 y 轴是“性能”,而线条的 y 轴是“总性能”。 R似乎不喜欢这个。此外,整个 x 轴不是数字。

我使用 ggplot2 是因为我不知道还可以使用什么,但如果您知道任何技术/软件包可以使这项工作发挥作用,我很乐意改变它。我也知道我可能需要重塑我的数据,这也很酷。

非常感谢。

【问题讨论】:

    标签: r charts ggplot2


    【解决方案1】:

    另一种方法是使用 geom_errorbar:

    ggplot(data=point3, aes(x=Person, y=Percentage, fill=factor(Quarter))) +
      geom_bar(colour="black", stat="identity", position=position_dodge(width=0.9), width=.8)  +
      geom_errorbar(aes(y=TotalPercentage, ymax=TotalPercentage, ymin=TotalPercentage), linetype="solid",size=1) +
      scale_fill_hue(name="Quarter") +
      xlab(" ") + ylab("Percentage") +
      theme_bw()
    

    【讨论】:

      【解决方案2】:

      我必须添加到您的示例数据中以使其更“完整”并使 R 友好的列名称。

      point3<-structure(list(Person = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L), 
      .Label = c("A", "B"), class = "factor"), 
      Quarter = c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), Percentage = c(40L, 
      45L, 55L, 60L, 35L, 40L, 60L, 25L), TotalPercentage = c(50L, 50L, 50L, 50L, 
      42L, 42L, 42L, 42L)), .Names = c("Person", "Quarter", "Percentage", 
      "TotalPercentage"), class = "data.frame", row.names = c(NA, -8L))
      

      然后您可以使用width=position_dodge(width=) 控制间距。然后添加条形图,我将一个缩小的数据框传递给geom_segment,并将因子转换为数字,以便能够在 x 轴上拉伸它。

      ggplot(data=point3, aes(x=Person, y=Percentage, fill=factor(Quarter))) + 
          geom_bar(colour="black", stat="identity", 
              position=position_dodge(width=.80), width=.5) +
          geom_segment(data=unique(point3[,c("Person","TotalPercentage")]), 
               aes(x=as.numeric(Person)-.4, xend=as.numeric(Person)+.4, 
               y=TotalPercentage, yend=TotalPercentage),
              inherit.aes=F, size=1.2) +
          scale_fill_hue(name="Quarter") +
          xlab(" ") + ylab("Percentage") +
          theme_bw()
      

      最终看起来像

      【讨论】:

      • 哇,你做到了。我想弄清楚你做了什么。我的主要问题是为什么每个数据条目末尾的“L”?我有点迷路了。但是,说真的,那太棒了。谢谢。
      • 我上面贴的样本数据是从dput输出的。这就是 R 喜欢编码整数文字的方式。没有 L 就可以正常工作
      猜你喜欢
      • 2019-05-24
      • 2021-11-21
      • 2022-01-14
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 2017-12-24
      • 2016-04-06
      • 2015-10-14
      相关资源
      最近更新 更多