我正在尝试创建一个条形图,其中对于每个类别,绘制两个条形图(并排):一个用于“总计”,另一个用于子组。例如,在以下数据框中,“名称”将显示在x轴上。对于“名称”中的每个类别,一个条形将表示“总计”的值,另一个条形图表示来自“aaa”,“bbb”和“ccc”的值的堆积条形图。我设法得到一个“背靠背”的情节,但我不知道如何将“躲闪”位置应用到这个案例中以使这些条形并排。
{{1}}
答案 0 :(得分:2)
您还可以增加条的宽度以更好地适应图形。 试试这个:
p = ggplot(df, aes(x=factor(names)), ) +
geom_bar(width=0.75,data=subset(df,num=="total"), aes(y=values), stat="identity",width=.5) +
geom_bar( width=0.75, data=subset(df,num!="total"), aes(y=-values,fill=factor(num)), stat="identity",width=.5)
print(p)
修改强>
我想我误解了你的问题。你想要一个名字中的条形并排吗?
答案 1 :(得分:2)
您可以使用facet。看来你不能同时堆叠和躲闪(见下面的相关帖子)。你可以为你的数据中的x变量和facet添加另一个因子来得到这样的结果:
编辑:根据评论调整条形的条形宽度。见这里:Remove space between bars ggplot2。
library(ggplot2)
p <- ggplot(data = df, aes(x = place, y = values, colour = num, fill = num))
p <- p + geom_bar(stat = "identity", width = 1, position = "stack")
p <- p + facet_grid(. ~ names)
p
如果您感兴趣,看起来您可以调整构面的边距以使ABC组看起来更接近。有关示例,请参阅以下相关帖子:
ggplot2 - bar plot with both stack and dodge
ggplot2 geom_bar position = "dodge" does not dodge
添加&#34;编辑的数据&#34;因子:
df <- structure(list(names = structure(c(1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 3L, 3L, 3L, 3L), .Label = c("A", "B", "C"), class = "factor"),
num = structure(c(1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L,
3L, 4L), .Label = c("aaa", "bbb", "ccc", "total"), class = "factor"),
values = c(1, 2, 3, 7, 2, 2, 5, 10, 3, 4, 2, 9), position = structure(c(1L,
1L, 1L, 2L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 2L), .Label = c("nums",
"total"), class = "factor")), .Names = c("names", "num",
"values", "place"), row.names = c(NA, -12L), class = "data.frame")
答案 2 :(得分:0)