Scale_brewer 的反序

看起来是一件很简单的事情,但是我花了超过30分钟没有找到答案。

如何逆转颜色的顺序?通过观察 Scale _ brewer 的文档,我认为它可能是 formatter=的论点是可疑的。我传递了 'rev'rev,但它们没有效果(没有错误消息,只是被忽略了)。

110952 次浏览

我想你可能想直接使用 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版本中,现在有一种更直接的方法可以做到这一点,请参阅下面@pbaylis 给出的答案。

如果你不想直接使用 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)))

我知道这不会解决观察所的问题。对于像 scale_..._brewer()这样离散的刻度,做 scale_..._manual(values = rev(colorsYouHad))是正确的答案。

然而,对于 连续性音阶,你可以简单地通过:

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

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

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

Ggplot2的 CRAN 版本现在允许用户在 啤酒酿造厂中指定 direction=-1来反转颜色。下面的图表与公认的答案是一样的。

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

我知道,已经很晚了。但是不久前我遇到了这个问题,并且使用了上面的解决方案。我现在正在浏览 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

我得到一个错误,说负号不适用于因子。我在和 Grey Scale 而不是 Brewer 工作,也许这就是错误的来源?对于 scale _ color _ gray,我发现从默认值反转开始点和结束点是有效的。

# 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)