7

我有一个包含两列 A 和 B 的数据框。我想生成一个条形图,其中 A 和 B 中的值并排绘制(躲避)。我四处搜索,从包 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不修改其结构的情况下按原样使用数据框完成吗?

4

2 回答 2

7

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

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

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

于 2013-01-29T16:24:12.633 回答
4

The only good way to do this is to rearrange your data to suit the needs of the 'ggplot' function. However, if you want to do it all in line, you can. You'll just have to reshape the data by hand, like so:

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

Here, I have created a new data frame out of the old one and assigned the corresponding variable names (this is what the 'reshape2' package does with the 'melt' function). Then, I have manually assigned the x-values to be 1:10 for "A" and 1:10 for "B" to make the bars appear next to each other, rather than all in order from 1:20. I added a 'fill' argument to change the colors of the bars to represent "A" or "B".

于 2013-01-29T16:45:30.660 回答