【问题标题】:Highlight one bar of a stacked bar chart in ggplot2在 ggplot2 中突出显示堆叠条形图的一个条形
【发布时间】:2018-10-03 14:09:15
【问题描述】:

我有一个堆积条形图,受this 页面上的Figure 3.8 的启发,我想突出显示条形图的一个条形。例如,我希望中间条的所有三种颜色都更暗,而第 1 条和第 3 条中的所有颜色都稍微浅一点。我假设scale_fill_OkabeItodarken 参数可能会以某种方式派上用场。

library(ggplot)    
library(colorblindr)
ID <- rep(1:3, each = 3)
group <- rep(letters[1:3], times = 3)    
prop <- c(0.8, 0.1, 0.1, 0.6, 0.3, 0.1, 0.4, 0.3, 0.3)

toy_df <- data.frame(ID = ID, group = group, prop = prop)

ggplot(toy_df, aes(x = ID, y = prop, fill = group)) +
  geom_bar(stat = "identity") +
  scale_fill_OkabeIto()

以下是目前的图表:

我看到posts 展示了如何为常规条形图执行此操作,但不知道如何为堆叠条形图执行此操作。

感谢您的帮助。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    这是一种简单的方法,只需将 alpha 映射到 ID 是否为给定值。

    ggplot(toy_df, aes(x = ID, y = prop, fill = group, alpha=toy_df$ID != 2)) +
      geom_bar(stat = "identity") +
      scale_alpha_manual(values=c(1, 0.7)) +
      guides(alpha=F)
    

    当然,你仍然可以使用你的色盲友好颜色集

    【讨论】:

    • aes 调用中包含toy_df$ 可能会导致错误
    • 如果是这样,添加一个额外的行:toy_df$isdark &lt;- toy_df$ID != 2,然后将 alpha 映射到 toy_df$isdark
    • 这行得通,但您希望始终执行 aes 调用,例如 alpha = isdarkalpha = ID != 2,而不包括数据框的名称
    • 它可能会导致范围界定问题,例如。这里有几个帖子:stackoverflow.com/questions/47860112/…stackoverflow.com/questions/29156155/misplaced-points-in-ggplot ggplot 期望你给它的列在它正在运行的数据框中,所以最好只匹配预期的输入
    【解决方案2】:

    执行此类操作的最简单方法是根据 ID 是否是您要突出显示的 ID 来更改 alpha。您可以在数据框中创建一个布尔变量,例如 isHilite = ID == 2,或者您可以在绘图时内联。

    我放弃了你的色标只是因为我没有安装那个包,而且没有必要给你看这个例子。

    如果您想使用更复杂的颜色功能,另一个选择是munsell package,它适用于完全不同的颜色系统。我还没有用足够多的东西来组合一个好的答案,但是它具有使颜色变暗、变亮和去饱和的功能。

    library(ggplot2)    
    ID <- rep(1:3, each = 3)
    group <- rep(letters[1:3], times = 3)    
    prop <- c(0.8, 0.1, 0.1, 0.6, 0.3, 0.1, 0.4, 0.3, 0.3)
    
    toy_df <- data.frame(ID = ID, group = group, prop = prop)
    
    ggplot(toy_df, aes(x = ID, y = prop, fill = group)) +
        geom_bar(aes(alpha = ID == 2), stat = "identity") +
        scale_alpha_manual(values = c("TRUE" = 1, "FALSE" = 0.6), guide = F)
    

    reprex package (v0.2.0) 于 2018 年 4 月 23 日创建。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 1970-01-01
      • 2018-09-30
      相关资源
      最近更新 更多