【问题标题】:ggplot2 reverse order of scale_brewerggplot2 scale_brewer的逆序
【发布时间】:2012-01-05 22:35:59
【问题描述】:

看似很简单的事情,但我花了 30 分钟以上没有找到答案。

如何颠倒颜色的顺序?通过查看documentation for scale_brewer,我认为formatter= 的论点可能是可疑的。我通过'rev',然后rev,但它们没有效果(没有错误消息,只是忽略了)。

【问题讨论】:

  • pbaylis 的回答 (set direction=-1) 似乎是对标题中问题的最简单回答,但 joran 或 Josh 给予了更多控制权,例如传递任意颜色序列,而不仅仅是相反的颜色。

标签: r ggplot2


【解决方案1】:

ggplot2 的 CRAN 版本现在允许用户在 scale_brewer 中指定 direction=-1 以反转颜色。以下产生与接受的答案相同的情节。

ggplot(mtcars,aes(x = mpg, y = disp)) + 
  geom_point(aes(colour = factor(cyl))) + 
  scale_colour_brewer(palette="BuPu", direction=-1)

【讨论】:

  • 起来!比rev(...)更直接
  • 对我不起作用。不知道为什么。是因为我用的是 Mac 吗?
  • 我在 MacOS Mojave v10.14.6 上有 R v3.6.1、ggplot2 v3.2.1、RColorBrewer v1.1.2,而且效果很好!
【解决方案2】:

我想你可能想直接使用brewer.pal 选择颜色,然后使用scale_colour_manual

library(ggplot2)
library(RColorBrewer)

ggplot(mtcars,aes(x = mpg, y = disp)) + 
    geom_point(aes(colour = factor(cyl))) + 
    scale_colour_manual(values = rev(brewer.pal(3, "BuPu")))

然后你可以rev那里的颜色顺序。

从 ggplot 的 2.0,0 版开始,现在有一种更直接的方法可以做到这一点,请参阅下面@pbaylis 的答案。

【讨论】:

  • +1 -- 这很好。在所需的颜色数量上“硬连线”也可能很好,例如:rev(brewer.pal(n=length(unique(mtcars$cyl)), "BuPu"))
  • ...或scale_fill_manual 哪种范式最适合您的几何。
  • 请随时使用我发布的代码更新您的答案,为清楚起见,我将删除我的答案。
  • 此解决方案在使用 library(RColorBrewer) 时有效。 (我知道 OP 已经知道这一点,但我想交换 ggplot 颜色但不知道这一点。)
【解决方案3】:

这对解决 OP 的问题没有帮助 - 我知道。对于像scale_..._brewer() 这样的离散尺度,使用scale_..._manual(values = rev(colorsYouHad)) 是正确的答案。

不过,对于连续音阶,您可以简单地通过:

scale_..._...(..., trans = "reverse")

例如,对于scale_..._brewer() 的连续等价物:

scale_..._distiller("My Scale", palette = "Spectral", trans = "reverse")

【讨论】:

  • 我很感激希望提醒用户现在更简单的方法来做同样的事情,但是由于两个答案 do 都有效,因此将不同答案称为“正确”的编辑一是不合适。我对我的答案非常敏感。一个简单的评论告诉我我的答案已经过时就足够了。
  • 这是一个不错的简单答案,对我有用,谢谢!
  • 请注意,在使用 trans = "reverse" 时,值的顺序也会发生变化。对于连续比例,这意味着图例值将减小向上
  • @joran,这个答案没有解决了 OP 的问题,因此没有做“同样的事情”。这就是我提交不同答案的原因。
  • 对于阅读我的查询的任何人,请尝试在比例连续函数中使用direction="horizontal" 而不是trans="reverse"
【解决方案4】:

我收到一条错误消息,指出减号不适用于因子。我正在使用灰度而不是 brewer,也许这就是错误的根源?对于 scale_color_grey,我发现从默认值反转起点和终点是可行的。

# lighter shade for first category (default)
+ scale_color_grey(start = 0.2, end = 0.8) 

# darker shade for first category 
+ scale_color_grey(start = 0.8, end = 0.2)

【讨论】:

    【解决方案5】:

    我知道,聚会很晚了。但是我不久前遇到了这个问题并使用了上述解决方案。我目前正在浏览 Hadley Wickham 的 r4ds,并且有一个非常简单的解决方案,所以我想我会发布它。改变这个:

    ggplot(mtcars,aes(x = mpg, y = disp)) + 
    geom_point(aes(colour = factor(cyl)))
    

    到这里:

    ggplot(mtcars,aes(x = mpg, y = disp)) + 
    geom_point(aes(colour = factor(-cyl))) #note the minus symbol
    

    【讨论】:

      【解决方案6】:

      如果你不想直接用RColorBrewer(一个可爱的包)乱七八糟,你可以在原始data.frame中反转因子的水平,然后绘制它:

      dsamp <- diamonds[sample(nrow(diamonds), 1000), ] 
      
      # Reverse the levels of the factor associated with color, here 'clarity'
      # (Might be safer to assign this to a new column named, e.g., 'clarity2')
      levels(dsamp$clarity) <- rev(levels(dsamp$clarity))
      
      d <- qplot(carat, price, data = dsamp, colour = clarity)
      d + scale_colour_brewer(breaks = levels(dsamp$clarity))
      

      如果您想以与反转前相同的顺序打印密钥,只需执行以下操作:

      d + scale_colour_brewer(breaks = rev(levels(dsamp$clarity)))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-20
        • 2015-12-08
        • 1970-01-01
        • 2017-09-01
        • 2010-10-17
        • 1970-01-01
        相关资源
        最近更新 更多