带有GGPlot的一个图表上的条形图+线图

时间:2014-07-26 01:55:32

标签: r charts ggplot2

我正在尝试制作一个分组的条形图......只需进行一些修改。

我有四个"列"对于我的图表:季度,人数,百分比,总百分比。我的数据示例如下:

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

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

| A | 1 | 40%| 50%|

| A | 2 | 45%| 50%|

| A | 3 | 55%| 50%|

| A | 4 | 60%| 50%|

| B | 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))

在前一个代码的末尾,但这只是在第二个和第三个条形图(中间)之间添加一个点。我通过Google找到了mock up of this using a grouped bar chart。这个只有3个酒吧,但也许你可以得到这个想法。我遇到的一些问题是,尽管它们的规模相同,但条形图的y轴是"性能"而线的y轴是" Total Performance"。 R似乎不喜欢这个。此外,整个x轴不是数字。

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

非常感谢。

2 个答案:

答案 0 :(得分: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()

enter image description here

答案 1 :(得分:0)

我必须添加到您的示例数据中以使其更“完整”并使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()

最终看起来像

enter image description here