在因子变量上绘制直方图

17

我想要复制与下方类似的图表(原始来源在这里):
stacked histograms

这个概念很简单,但我对如何在R中完成有些困惑。
总结一下:我想要根据每周的每一天生成24小时行为频率的直方图(24级别的因子变量)。然后,我想将这些直方图叠在一起,以便可以轻松比较一天内行为分布(请参见示例)。

例如,我的数据可能如下所示:

  weekday hour    count
  Tuesday   15      553
   Monday    1       53
   Monday   10      539
   Monday   15      629
  Tuesday    9      281
 Saturday    4       11
   Monday    3       20
   Sunday    3       10
   Sunday    7        2
   Sunday    2       17

我该如何实现上面链接中的图形呢?我对ggplot不熟悉,但感觉它可能是解决方案。谢谢!

1个回答

32

你是希望我翻译这个吗?

set.seed(1234)
df <- data.frame(weekday=rep(sort(unique(weekdays(.leap.seconds))), each=24), 
                       hour=rep(1:24, 7), count=sample(2:600, 24*7, replace=T))

df$weekday <- factor(df$weekday, levels=c("Monday", "Tuesday", "Wednesday", 
                      "Thursday", "Friday", "Saturday", "Sunday"), ordered=T)
df$hour <- factor(df$hour)

require(ggplot2)    
p <- ggplot(data = df, aes(x=hour)) 
p <- p + geom_histogram(aes(weights=count, fill=weekday))
p <- p + scale_fill_brewer(palette="Set3")
p <- p + facet_wrap( ~ weekday, ncol=1)
p

ggplot2_facet_histogram


1
做得好。@Arun,你是最棒的。 - roody
2
@roody请确保您的小时列是一个因子。 - Gregor Thomas
没错!那就是问题所在。谢谢@shujaa! - roody
1
@roody 当然可以。你也可以将其保留为数字,并在geom_histogram()调用内添加binwidths = 1,但是作为因子,柱形将像Arun的答案一样漂亮地居中在标签上方。 - Gregor Thomas
1
我之前在为不同数据框中的不同行为变量创建相同的图表。我的代码中有一个拼写错误,这是问题所在。我想我已经基本掌握了如何使用gridExtra来排列这些图表。一如既往,非常感谢! - roody
显示剩余3条评论

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