Ggplot2 обратный порядок scale_brewer
По-видимому, очень простая вещь, но мне понадобилось > 30 минут без ответа.
Как изменить порядок цветов? Посмотрев документацию для scale_brewer, я понял, что аргумент formatter=
является подозрительным. Я прошел 'rev'
, а затем rev
, но они не имеют никакого эффекта (нет сообщения об ошибке, просто игнорируются).
Ответы
Ответ 1
Я думаю, вы, вероятно, захотите напрямую выбрать цвета, используя brewer.pal
, а затем используйте scale_colour_manual
:
ggplot(mtcars,aes(x = mpg, y = disp)) +
geom_point(aes(colour = factor(cyl))) +
scale_colour_manual(values = rev(brewer.pal(3,"BuPu")))
Тогда вы можете rev
порядок цветов там.
Начиная с версии 2.0.0 ggplot теперь есть более прямой способ сделать это, см. ответ на @pbaylis ниже.
Ответ 2
Теперь версия CRG ggplot2 позволяет пользователям указывать direction=-1
в scale_brewer, чтобы изменить цвета. Ниже приводится тот же график, что и принятый ответ.
ggplot(mtcars,aes(x = mpg, y = disp)) +
geom_point(aes(colour = factor(cyl))) +
scale_colour_brewer(palette="BuPu", direction=-1)
Ответ 3
Это не поможет с проблемой ОП - я знаю. Для дискретных масштабов, таких как scale_..._brewer()
, правильный ответ scale_..._manual(values = rev(colorsYouHad))
.
Тем не менее, для непрерывных шкал можно просто передать:
scale_..._...(..., trans = "reverse")
например, для непрерывного эквивалента scale_..._brewer()
:
scale_..._distiller("My Scale", palette = "Spectral", trans = "reverse")
Ответ 4
Если вы не хотите гасить напрямую с помощью 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)))