barplot 2酒吧一堆叠其他不
尽管有一些类似的问题和我的研究,我似乎无法解决我的小问题。请原谅如果答案是很容易的,我傻....我有一个数据帧barplot 2酒吧一堆叠其他不
df<-data.frame(X = c("Germany", "Chile","Netherlands","Papua New Guinea","Cameroon"), R_bar_Ger = c(1300000000, 620000, 550000, 400000, 320000))
我想产生barplot有2条(国家名称上的X achsis,数量在y-achsis上)。 左侧栏应显示德国,右侧应与其余4个国家堆叠。
请提前帮助,非常感谢!
一种方法来解决这个是通过使用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"))
需要注意的是,如果你不熟悉ggplot2
,只有前两行是必要的创建情节 - 别人都使我你看起来不错。由于德国的数量比其他国家大得多,如果没有某种程度的扩张,这种情况不会很好。 ggplot2
有许多内置的缩放命令,可能值得探索 - 在这里,我已经添加了平方根缩放比例,以便非德国国家可以根据需要实际进行堆叠。
为ggplot2
条形图的文档可以发现here - 这是绝对值得一读,如果你正在寻找一个强大的绘图工具。
皮肤猫有很多种方法,当你学习新工具时,你的确切问题经常会改变。我可能不会设置的问题说明了这种方式,但坚持尽可能靠近你的数据和barplot成为可能,一个方式来实现什么,我认为你想要的是:
with(aggregate(R_bar_Ger ~ X=="Germany", data=df, sum), barplot(R_bar_Ger, names.arg=c("Other", "Germany")))
所以,我们在做什么这里是通过加法汇总德国和非德国的数字,然后将这些值与合理的x轴标签一起传递给barplot函数。
你需要一个附加列第一添加到您的数据:
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))
这看起来很神奇,正是我一直在寻找的!我仍然收到错误消息,但我认为这与我的R版本有关。将解决它。尽管这是一段很好的代码。谢谢! – samyandi
谢谢!这非常有帮助! – samyandi