【问题标题】:Overlay histogram and density with varying alpha使用不同的 alpha 叠加直方图和密度
【发布时间】:2020-09-23 21:10:16
【问题描述】:

我正在尝试创建一个带有密度叠加的 ggplot 直方图,其中 alpha 变化超过数字 1。可以在我们的模拟部分的每个结果下看到一个示例 on 538。阿尔法根据选举人票数而有所不同。我接近得到一个类似的图表,但我不知道如何让密度和直方图一起工作。

代码

library(data.table)
library(ggplot2)
dt <- data.table(ratio = rnorm(10000, mean = .5, sd = 1))

dt[, .(ratio,
          al = (ratio >= 1))] %>% 
  ggplot(aes(x = ratio, alpha = al)) +
  geom_histogram(aes(), bins = 100,
                 fill = 'red') +
  geom_density(aes(),size = 1.5,
               color = 'blue') +
  geom_vline(xintercept = 1,
             color = '#0080e2', 
             size = 1.2) +
  scale_alpha_discrete(range = c(.65, .9))

此尝试根据需要正确地将 alpha 更改为 1,但密度估计未按比例缩放。

dt[, .(ratio,
       al = (ratio >= 1))] %>% 
  ggplot(aes(x = ratio)) +
  geom_histogram(aes(y = ..density.., alpha = al), bins = 100,
                 fill = 'red') +
  geom_density(aes(y = ..scaled..),size = 1.5,
               color = 'blue',) +
  geom_vline(xintercept = 1,
             color = '#0080e2', 
             size = 1.2) +
  scale_alpha_discrete(range = c(.65, .9))

这种尝试正确地缩放了密度曲线,但现在 geom_histogram 是针对低于 1 和高于 1 的值单独计算的。我希望它们作为一组计算。

我错过了什么?

【问题讨论】:

  • 愿意分享theme_josh?
  • 糟糕忘了删除它。它只是网格标记和传说的东西。该问题不需要

标签: r ggplot2


【解决方案1】:

了解你的主题很重要的原因是有一个简单的捷径,它使用 alpha,而只是在绘图的左半边绘制一个半透明的矩形:

library(data.table)
library(ggplot2)
library(dplyr)

data.table(ratio = rnorm(10000, mean = .5, sd = 1)) %>%
  ggplot(aes(x = ratio)) +
  geom_histogram(aes(y = ..density..), bins = 100,
                 fill = 'red') +
  geom_line(aes(), stat = "density", size = 1.5,
               color = 'blue') +
  geom_vline(xintercept = 1,
             color = '#0080e2', 
             size = 1.2) +
  annotate("rect", xmin = -Inf, xmax = 1, ymin = 0, ymax = Inf, fill = "white",
           alpha = 0.5) +
  theme_bw()

分成两组并使用alpha是可能的,但它基本上需要你预先计算直方图和密度曲线。这很好,但是对于很少的视觉增益来说,这将是非常多的额外努力。

当然,如果theme_josh 有自定义背景颜色和奇怪的网格线,那么这种方法可能不会那么有效。只要您将填充颜色设置为面板背景,您就应该得到一个不错的结果。 (我认为默认的 ggplot 面板是“gray90”或“gray95”)

【讨论】:

    猜你喜欢
    • 2020-06-01
    • 2021-03-14
    • 2015-07-29
    • 1970-01-01
    • 2020-08-08
    相关资源
    最近更新 更多