Подтвердить что ты не робот

Ggplot2 обратный порядок scale_brewer

По-видимому, очень простая вещь, но мне понадобилось > 30 минут без ответа.

Как изменить порядок цветов? Посмотрев документацию для scale_brewer, я понял, что аргумент formatter= является подозрительным. Я прошел 'rev', а затем rev, но они не имеют никакого эффекта (нет сообщения об ошибке, просто игнорируются).

4b9b3361

Ответ 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)))