【问题标题】:Barplot in R/ggplot with multiple factorsR / ggplot中的条形图具有多个因素
【发布时间】:2014-01-06 15:43:50
【问题描述】:

我有一张桌子,我想用 ggplot2 制作一个情节,但到目前为止我还没有成功。 我准备了一个看起来像这样的简化表

df1<-data.frame(Loc=c(rep("L1",5),rep("L2",3),rep("L3",4)),
Type=c(rep("T1",3),rep("T2",2),"T1","T2","T2","T1","T1","T2","T2"),
       y2009=rep("A",12),y2010=c("A","B","A","A","A","A","B","B","A","A","B","B"),
       y2011=c("B","B","B","A","B",rep("B",4),"A","B","B"))
df1

Loc 有 3 个位置。每个位置有 2 种类型的样本 T1 或 T2。它们从 2009 年开始为 A,随着时间的推移,一些变为 B。所以,到 2011 年,有很多 B。

这是我目前得到的图

ggplot(df1,aes(x=Type)) + geom_bar()+facet_grid(~Loc)
ggplot(df1,aes(x=y2009,fill=Type)) + geom_bar(position="dodge")+facet_grid(~Loc)

我不太确定如何从三个因素中获得计数。

我想要一个类似于下图的图形,我用油漆粗略地绘制了它。刻面是位置,我只为 Loc1 制作了条形图作为示例。

【问题讨论】:

  • 这将帮助您开始cookbook-r.com/Graphs,您可能对堆叠的条形图和刻面特别感兴趣/
  • 你快到了,从reshape2查看melt
  • hmmm.. 表中的所有列都是因子。熔体对因子有影响吗?我认为它只有在存在带有数字或整数的列时才会起作用。
  • melt 专门添加一列因子,并删除这些列
  • @Justin 可能,我已经很久没有研究 lattice 了。 Henrik 展示了一条路线(尽管仍然存在一些问题),this 可能还有其他一些一般性想法。

标签: r ggplot2


【解决方案1】:

尝试多层次构面:

df2 <- melt(df1, id.vars=c("Loc", "Type"))
ggplot(data=df2, aes(x=value, fill=Type)) + 
  geom_bar() + facet_wrap(~ Loc + variable, nrow=1)

或者,facet_grid,我认为它看起来更好,但与你的草图不太匹配:

df2 <- melt(df1, id.vars=c("Loc", "Type"))
ggplot(data=df2, aes(x=value, fill=Type)) + 
  geom_bar() + facet_grid(Loc ~ variable)

最后,借用from this post,您可以尝试通过颜色更好地区分位置(显然配色方案可能需要一些工作,但您明白了):

df2 <- melt(df1, id.vars=c("Loc", "Type"))
ggplot(data=df2, aes(x=value, fill=Type)) + 
  geom_rect(aes(fill=Loc),xmin =-Inf,xmax=Inf,ymin=-Inf,ymax=Inf,alpha = 0.1) +
  geom_bar() +
  facet_wrap(~ Loc + variable, nrow=1)

如果您想为每个位置实际使用单独的面板,我认为您必须使用生成自己的网格视口和 grobs。有一个包 ggextra 做了这样的事情,但它似乎不适用于最新的 R 版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    • 2018-11-18
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多