【问题标题】:Shade background of a ggplot chart using geom_rect with categorical variables使用带有分类变量的 geom_rect 对 ggplot 图表的背景进行着色
【发布时间】:2018-05-14 22:31:12
【问题描述】:

这是我的数据集示例:

df <- data.frame(group = rep(c("group1","group2","group3", "group4", "group5", "group6"), each=3),
                 X = paste(letters[1:18]),
                 Y = c(1:18))

如您所见,共有三个变量,其中两个是分类变量(groupX)。我使用 ggplot2 构建了一个折线图,其中 X 轴为 X,Y 轴为 Y

我想使用 group 变量对背景进行着色,这样就必须出现 6 种不同的颜色。

我试过这段代码:

ggplot(df, aes(x = X, y = Y)) +
  geom_rect(xmin = 0, xmax = 3, ymin = -0.5, ymax = Inf,
            fill = 'blue', alpha = 0.05) +
  geom_point(size = 2.5)

geom_rect() 仅对 X 轴上03 之间的区域进行着色。

我想我可以通过将geom_rect() 复制很多次来手动完成。但我确信使用变量本身必须有更漂亮的代码。有什么想法吗?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    要获得整个图形的阴影,geom_rect 需要所有矩形的 xminxmax 位置,因此需要通过将 xminxmax 映射到数据中的列来提供这些位置,而不是硬编码。

    ggplot(df, aes(x = X, y = Y)) +
      geom_rect(aes(xmin = X, xmax = dplyr::lead(X), ymin = -0.5, ymax = Inf, fill = group), 
                alpha = 0.5) +
      geom_point(size = 2.5) +
      theme_classic()
    

    【讨论】:

      【解决方案2】:

      这是一种方法:

      df2 <- df %>% mutate(Xn=as.numeric(X))
      
      ggplot(df2) +
        geom_rect(aes(xmin=Xn-.5, xmax=Xn+.5, ymin=-Inf, ymax=Inf, fill = group), alpha=0.5, stat="identity") +
        geom_point(aes(x = Xn, y = Y), size = 2.5) + scale_x_continuous(breaks=df2$Xn, labels=df2$X)
      

      【讨论】:

        【解决方案3】:

        这将使您接近 - 需要向您的数据框添加几列。在这里使用 dplyr。

        df <- df %>%
          group_by(group) %>%
          mutate(xmin = sort(X)[1],
                 xmax = sort(X, decreasing = T)[1])
        
        ggplot(df, aes(x = X, y = Y)) +
          geom_point(size = 2.5) + 
          geom_rect(aes(xmin=xmin, xmax = xmax, fill = group), ymin = -0.5, ymax = Inf,
                    alpha = 0.05) 
        

        【讨论】:

          猜你喜欢
          • 2015-10-09
          • 2015-10-01
          • 2021-08-24
          • 1970-01-01
          • 2016-06-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多