【问题标题】:Making smart multilevel histograms制作智能多级直方图
【发布时间】:2015-01-03 11:28:09
【问题描述】:

我在 Windows 上使用 RStudio 版本 0.98.1028。 我想使用 ggplot2 制作多级直方图。假设我有一个这样的 4D 数据框:

facet <- as.factor(rep(c('alpha', 'beta', 'gamma'), each = 4, times = 3))
group <- as.factor(rep(c('X', 'Y'), each = 2, times = 9))
type <- as.factor(rep(c('a', 'b'), each = 1, times = 18))
day <- as.factor(rep(1:3, each = 12)

df = data.frame(facet = facet, group = group, type = type, day = day, value = abs(rnorm(36)))

我想在 3 个方面制作 x = dayy = value 的直方图,对应于 facet,按 group 分组并按 type 填充。换句话说,我想将ab 堆积在一个条中,但为XY 保留单独的条。它看起来像

g = ggplot(df, aes(day, value, group = group, fill = type))
g + geom_histogram(stat = 'identity', position = 'dodge') +
    facet_grid(facet ~ .)

不幸的是,使用dodge 选项,我得到了未堆叠的直方图,而没有我每天得到 4 个柱状图。关于如何解决这个问题的任何想法?

使用 excel 的一个方面应该是这样的

提前致谢!

EB

【问题讨论】:

  • 我很难理解您到底在寻找什么 - 您能提供一张 Excel 图表的图片吗?
  • 我同意@CMichael,如果您包含 Excel 图表的图形,您将更容易理解您要查找的内容...

标签: r ggplot2 histogram


【解决方案1】:

好吧,也许您的问题与this one on the ggplot group 有关。 一个可能的解决方案如下:

g = ggplot(df, aes(group, value, fill = type))
g + geom_bar(stat = 'identity', position = 'stack') +
    facet_grid(facet ~ day)

这是次优的,因为您使用的是两个方面,但通过这种方式您可以获得这个数字:

【讨论】:

  • 几乎!只有我想要三个主要方面!
  • 我认为此时您只能尝试“隐藏”删除空格和标签的日期分面...
【解决方案2】:

正如@Matteo 所指出的,您的特定愿望可能无法通过ggplot2 提供的工具直接实现。下面提供的一些黑客攻击可能指向正确的方向 - 我并没有过多地支持它,但我只是花了几分钟时间玩弄它。也许你可以挑选一些元素。

我将组和天组合成一个因素,并在绘图时手动将 x 标签替换为(非唯一)组名。然后我包括(以一种懒惰的方式)日标签。我仍然觉得 day x facet 是你应该继续的方式。

df$combinedCategory <- as.factor(paste(df$day,df$group))
library(scales)
g = ggplot(df, aes(combinedCategory, value, fill = type))
g = g + geom_bar(stat='identity',position = 'fill')
g = g +   facet_grid(facet ~ .)
g = g + scale_y_continuous(labels  = percent)
g = g + scale_x_discrete(labels = c("X","Y"))
g = g + geom_text(aes(x=1.5,y=0.05, label="Day 1"))
g = g + geom_text(aes(x=3.5,y=0.05, label="Day 2"))
g = g + geom_text(aes(x=5.5,y=0.05, label="Day 3"))
g = g + theme_minimal()
g

这给出以下内容:

【讨论】:

  • 确实选择就够了
【解决方案3】:

确实,在aes() 中设置y = interaction(group, day) 就足够了。这实际上是我的第一步,但我想知道是否存在更精确的东西。显然不是:这里唯一的棘手点是创建第二级 x 轴标签行。谢谢大家!

【讨论】:

  • 当然这是我问题的答案:这正是我所要求的。
猜你喜欢
  • 1970-01-01
  • 2012-02-07
  • 2020-01-30
  • 1970-01-01
  • 2016-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多