按条件因子化的qplot

3
使用这个数据框架df
bat.condition bat.group      bat.money
1              safe          2825.882
2              safe          2931.875
1              glsa          6975.882
2              glsa          5407.500
1              studyabroad   3084.706
2              studyabroad   2253.750 
1              jcc           4134.706
2              jcc           5550.625
1              eagg          4578.824
2              eagg          5456.250

我希望绘制一个柱状图,x轴上分组,y轴上是钱数。此外,我希望根据它们发生的条件将条形分开/分层。到目前为止,我已经使用了以下代码,它几乎是理想的。我已经按组因素划分了条形,我只想进一步按条件划分。

qplot(factor(bat.group), data = df, geom = "bar", fill = bat.group, 
      weight = bat.money, position = "dodge")

这是产生了这里所看到的图片。
3个回答

1

通常可以使用 interaction 函数来获取分组:

 qplot(interaction(bat.condition, bat.group), data = df, geom = "bar", fill = bat.group, 
      weight = bat.money, position = "dodge")

这就是我一直在寻找的 - 我没有在文档中搜索“interaction”这个术语。很有道理。 - Daniel

1
您可以向数据框中添加新变量,并像这样使用facets:
df$factor = factor(df$bat.group)
qplot(as.character(bat.condition), data = df, geom = "bar", fill = bat.group, 
      weight = bat.money, position = "dodge", facets = . ~ factor)

Result


0

这里有一个解决方案,可以实现我认为你正在寻求的功能。我使用了ggplot语法,而不是qplot。我使用了facet_wrap来按照bat.condition分离您的数据。此外,geom_barplot需要参数stat="identity",否则它将尝试对您的数据进行分组。

# Using ggplot2 version 0.9.2.1
library(ggplot2)

dat = read.table(header=TRUE, 
text="bat.condition bat.group      bat.money
1              safe          2825.882
2              safe          2931.875
1              glsa          6975.882
2              glsa          5407.500
1              studyabroad   3084.706
2              studyabroad   2253.750 
1              jcc           4134.706
2              jcc           5550.625
1              eagg          4578.824
2              eagg          5456.250")


p1 = ggplot(data=dat, aes(x=bat.group, y=bat.money, fill=bat.group)) +
     geom_bar(stat="identity") +
     facet_wrap(~ bat.condition)

ggsave(plot=p1, filename="plot_1.png", height=5, width=8)

enter image description here

编辑: 使用fill=bat.condition并添加position="dodge"将生成一个类似于您在评论中链接的图形。

p2 = ggplot(data=dat, aes(x=bat.group, y=bat.money, fill=factor(bat.condition)))+
     geom_bar(position="dodge")

ggsave(plot=p2, filename="plot_2.png", height=4, width=6)

enter image description here


看起来很不错。我在想是否有可能将条件1和条件2的值并排放置在每个组旁边。就像这样:http://www.jidesoft.com/images/bar-chart-group.png - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接