barplot 2 bar一个堆叠另一个没有

时间:2016-01-21 15:27:46

标签: r bar-chart

尽管有一些类似的问题和我的研究,我似乎无法解决我的小问题。请原谅,如果答案很简单,我很傻....我有一个数据框

df<-data.frame(X = c("Germany", "Chile","Netherlands","Papua New Guinea","Cameroon"), R_bar_Ger = c(1300000000, 620000, 550000, 400000, 320000))

我想制作一个有2个小节的条形图(x-achsis上的国家名称,y-achsis上的金额)。 左侧栏应显示德国,右侧应与其余4个国家叠加。

请提前帮助并非常感谢!

3 个答案:

答案 0 :(得分:5)

解决此问题的一种方法是使用ggplot2并稍微操纵数据框。

首先,在数据框中添加一列,指示应在哪个国家/地区绘制的国家/地区(德国或非德国):

df$bar <- ifelse(df$X == "Germany", 1, 0)

现在,创建情节:

ggplot(data = df, aes(x = factor(bar), fill = factor(X), y = R_bar_Ger)) + 
  geom_bar(stat = "identity") + 
  scale_y_sqrt() + 
  labs(x = "Country Group", title = "Square Root Scale", fill = "Country") + 
  scale_x_discrete(labels = c("Not Germany", "Germany"))

enter image description here

请注意,如果您不熟悉ggplot2,则只需要前两行来创建绘图 - 其他行是为了让它看起来不错。由于德国比其他国家大几个数量级,如果不进行某种扩展,这种情况看起来不会很好。 ggplot2有许多可能值得探索的内置缩放命令 - 在这里,我添加了平方根比例,以便非德国国家实际上可以根据需要进行堆叠。

可以找到ggplot2条形图的文档here - 如果您正在寻找强大的绘图工具,那么它绝对值得一读。

答案 1 :(得分:2)

有许多方法可以给猫皮肤涂抹,当您学习新工具时,您的确切问题通常会发生变化。我可能不会以这种方式设置问题规范,但尽可能贴近你的数据和条形图,实现我想你想要的一种方法是:

with(aggregate(R_bar_Ger ~ X=="Germany", data=df, sum), barplot(R_bar_Ger, names.arg=c("Other", "Germany")))

所以我们在这里做的是通过添加汇总德国和非德国的数字,然后将这些值与合理的x轴标签一起传递给barplot函数。

答案 2 :(得分:2)

您需要首先在数据中添加其他列:

df$group <- ifelse(df$X=="Germany","Germany","Other")

然后我们可以使用以下ggplot方法

library(ggplot)
qplot(x = factor(group), y = R_bar_Ger, data=df, geom = "bar", stat = "identity", fill = factor(X))

enter image description here