【问题标题】:How shade area under ggridges histogram (stat = binline)?ggridges直方图(stat = binline)下的阴影区域如何?
【发布时间】:2018-04-24 02:27:54
【问题描述】:

使用 Dr. Evers suggestion 用 ggridges 对密度曲线下的区域进行着色效果很好。但是,我发现密度曲线可能具有欺骗性,因为它们暗示数据存在,而数据不存在。因此,我想我会尝试使用普通直方图的这种着色技术。

但是,当我尝试将它与直方图一起使用时,阴影有点偏离。这是为什么呢?

library(tidyverse)
install.packages("ggridges", dependencies=TRUE)  # there are many
library(ggridges)
 t2 <-   structure(list(Date = c("1853-01", "1853-02", "1853-03", "1853-04", 
"1853-05", "1853-06", "1853-07", "1853-08", "1853-09", "1853-10", 
"1853-11", "1853-12", "1854-01", "1854-02", "1854-03", "1854-04", 
"1854-05", "1854-06", "1854-07", "1854-08", "1854-09", "1854-10", 
"1854-11", "1854-12"), t = c(-5.6, -5.3, -1.5, 4.9, 9.8, 17.9, 
18.5, 19.9, 14.8, 6.2, 3.1, -4.3, -5.9, -7, -1.3, 4.1, 10, 16.8, 
22, 20, 16.1, 10.1, 1.8, -5.6), year = c("1853", "1853", "1853", 
"1853", "1853", "1853", "1853", "1853", "1853", "1853", "1853", 
"1853", "1854", "1854", "1854", "1854", "1854", "1854", "1854", 
"1854", "1854", "1854", "1854", "1854")), row.names = c(NA, -24L
), class = c("tbl_df", "tbl", "data.frame"), .Names = c("Date", 
"t", "year"))


gg <- ggplot(t2, aes(x = t, y = year)) +
      geom_density_ridges(stat = "binline", bins = 10, scale = 0.8, 
                      draw_baseline = TRUE) +
      theme_ridges()

# Build ggplot and extract data
d <- ggplot_build(gg)$data[[1]]

# Add geom_ribbon for shaded area
gg +
  geom_ribbon(
    data = transform(subset(d, x >= 10), year = group),
    aes(x, ymin = ymin, ymax = ymax, group = group),
    fill = "red",
    alpha = 1.0) 

【问题讨论】:

    标签: r ggplot2 ggridges


    【解决方案1】:

    如果您愿意调整大小并移动 bin 以使 bin 边界恰好位于您的分界线(此处为 10),则以下方法有效。

    ggplot(t2, aes(x = t, y = year, fill = ifelse(..x..>=10, ">= 10", "< 10"))) +
      geom_density_ridges_gradient(stat = "binline", binwidth = 3,
                                   center = 8.5, scale = 0.8, 
                                   draw_baseline = TRUE) +
      theme_ridges() +
      scale_fill_manual(values = c("gray70", "red"), name = NULL)
    

    之所以观察到你所做的效果是因为 x 轴在第一个和第二个绘图之间发生变化,并且 x 轴范围对 bin 的绘制方式有影响。有两种解决方案:您可以固定 x 轴范围或通过 centerbinwidth 而不是 bins 定义 bin。 (在我看来,无论您如何处理 x 轴,第二个选项总是首选。)

    首先,固定x轴范围:

    gg <- ggplot(t2, aes(x = t, y = year)) +
      geom_density_ridges(stat = "binline", bins = 10, scale = 0.8, 
                          draw_baseline = TRUE) +
      theme_ridges() +
      scale_x_continuous(limits = c(-12, 28)) # this is where the change is
    
    # Build ggplot and extract data
    d <- ggplot_build(gg)$data[[1]]
    
    # Add geom_ribbon for shaded area
    gg +
      geom_ribbon(
        data = transform(subset(d, x >= 10), year = group),
        aes(x, ymin = ymin, ymax = ymax, group = group),
        fill = "red",
        alpha = 1.0) 
    

    二、替代bin定义:

    gg <- ggplot(t2, aes(x = t, y = year)) +
      geom_density_ridges(stat = "binline",
                          binwidth = 3, center = 8.5, # this is where the change is
                          scale = 0.8, draw_baseline = TRUE) +
      theme_ridges()
    
    # Build ggplot and extract data
    d <- ggplot_build(gg)$data[[1]]
    
    # Add geom_ribbon for shaded area
    gg +
      geom_ribbon(
        data = transform(subset(d, x >= 10), year = group),
        aes(x, ymin = ymin, ymax = ymax, group = group),
        fill = "red",
        alpha = 1.0) 
    

    【讨论】:

      【解决方案2】:

      确实发生了一些奇怪的事情。请参阅下面的“结论”。

      1. 如果我们只绘制gg

         gg;
        

      2. 如果我们绘制gg 加上一个应该对应于gg 轨迹的阶梯:

          gg +
              geom_step(
                  data = d, 
                  aes(xmax, ymax, group = group), 
                  direction = "vh", col = "red",  size = 2);
        

      所以添加geom_step 会以某种方式改变gg。我不明白这怎么可能。您可以看到geom_step(红色曲线)实际上与单独绘制gg 时的直方图轨迹相对应(参见第一张图)。

      【讨论】:

      • 我已经在github.com/clauswilke/ggridges 发布了这个问题,如果/解决后会回到这里。
      • bin 线发生变化,因为 x 轴限制在第一个和第二个图之间发生变化,并且直方图仅由 bin 数量指定,而不是 binwidth 和位置指定。修复 x 轴限制或 binwidth 和位置 resolves the issue
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      相关资源
      最近更新 更多