如何使用stat =“identity”ggplot躲避条形图?

时间:2013-01-29 16:20:05

标签: r ggplot2

我有一个包含两列A和B的数据框。我想生成一个条形图,其中A和B的值并排绘制(躲闪)。我用Google搜索并从包ggplot2中找到了ggplot。默认设置是使用频率生成条形图,但有一个选项stat="identity"允许选择一个变量来明确设置条形高度。我可以像这样绘制一个列:

d <- data.frame(A=c(1:10), B=c(11:20))
ggplot(data=d, aes(x=1:length(A), y=A))+geom_bar(stat="identity", position="dodge")

如何并排绘制两列?我可以不同地构造我的数据框:将来自向量A和B的值附加到一列中并创建指示符变量ind,然后使用它来定义组aes(group=ind)。是否可以按原样使用数据框d,而不修改其结构?

2 个答案:

答案 0 :(得分:7)

您可以使用melt包中的reshape2来创建您正在寻找的情节。

library(reshape2)
d$ind <- seq_along(d$A)

d.m <- melt(d, id.var='ind')

ggplot(d.m, aes(x=ind, y=value, fill=variable)) + 
  geom_bar(stat='identity', position='dodge')

通常,当您在单个data.frame中提供所有数据时,ggplot效果最佳。每个geom类型至少有一个data.frame。

答案 1 :(得分:4)

唯一的方法是重新排列数据以满足'ggplot'功能的需要。但是,如果你想全部排成一行,你可以。您只需要手动重塑数据,如下所示:

ggplot(data=data.frame(value=c(d$A, d$B), variable=c(rep("A",10),rep("B",10))), aes(x=c(1:10,1:10), y=value, fill=variable))+geom_bar(stat="identity", position="dodge")

在这里,我从旧的数据框中创建了一个新的数据框并分配了相应的变量名称(这就是'reshape2'包与'melt'函数的作用)。然后,我手动将x值分别设置为1:10为“A”,将1:10设为“B”,使条形显示为彼此相邻,而不是从1:20开始按顺序排列。我添加了一个'fill'参数来改变条形的颜色来表示“A”或“B”。