【问题标题】:ggplot histogram - how to add multiple colors without creating separate densitiesggplot histogram - 如何在不创建单独密度的情况下添加多种颜色
【发布时间】:2020-01-04 03:56:04
【问题描述】:

当我向 ggplot 添加颜色分割并使用 y=..density.. 添加 geom_histogram 时,它会为每种颜色生成一个单独的密度。我试图让它显示单一的密度和颜色代码的一部分。

如果只是单个图表,可以使用 y=..count 获得正确的视觉效果...但是,在构面网格中,总计数较小的构面在视觉上太小:

ggplot(data=dataset, aes(x = myvariable, fill=factor(myfillfactor))) + facet_grid(cols = vars(myDimension1), rows = vars(myDimension2)) + geom_histogram(aes(y=..count..))

使用密度使尺寸更相似,但您可以看到这 2 种颜色实际上是 2 种不同的密度:

ggplot(data=dataset, aes(x = myvariable, fill=factor(myfillfactor))) + facet_grid(cols = vars(myDimension1), rows = vars(myDimension2)) + geom_histogram(aes(y=..count..)) + ylim(0,.2)

让密度覆盖两种颜色的任何想法?我还考虑过保持 ..count.. 并尝试缩放方面,例如通过将每个 y 值除以组的计数,但我不太了解 R 以了解如何做到这一点(我想这就是 ..ncount.. 所做的,但也会产生不同的密度)

【问题讨论】:

    标签: r ggplot2 histogram


    【解决方案1】:

    所以这个答案可能无法解决直方图问题,但如果目标是获得视觉上相似的直方图缩放,您也可以考虑使用facet_wrap(scales = "free_y")。例如:

    # Make up some dummy data
    df <- data.frame(x = c(rnorm(100, 1), rnorm(100, 2), rnorm(20, 1), rnorm(20, 2)),
                     cat = rep(c("A", "B", "A", "B"), c(100, 100, 20, 20)),
                     panel = rep(c("C", "D"), c(200, 40)))
    
    # Free facet y scales
    ggplot(df, aes(x, fill = cat)) +
      geom_histogram() +
      facet_wrap(~ panel, scales = "free_y")
    

    【讨论】:

    • 谢谢。我去试了一下。我使用 facet_grid 分割 2 个变量,而 facet_grid 不支持 free_y 整行。
    猜你喜欢
    • 2014-04-18
    • 2019-07-01
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2019-06-21
    • 2018-05-15
    • 2022-10-16
    • 1970-01-01
    相关资源
    最近更新 更多