Как я могу сохранить свой заказной порядок легенды в R, одновременно используя палитры ColorBrewer? - PullRequest
2 голосов
/ 09 марта 2020

Я знаю, как изменить порядок моей легенды, используя разрывы в scale_color_discrete. Я также знаю, как изменить цветовую палитру с помощью scale_color_brewer.

Однако я не знаю, как правильно сгруппировать их. Если я использую приведенный ниже код, R назначит желаемую цветовую палитру, а затем переупорядочит мой список. Я хочу, чтобы это происходило в обратном порядке, потому что я хочу, чтобы последовательная раскраска палитры выполнялась в соответствии с указанным мною порядком. Как я могу сделать это без необходимости вручную вводить цветовые коды?

library(ggplot2)

df <- data.frame(team=c("liquid","faze","faze","wtsg","liquid","wtsg","faze","liquid","faze","wtsg"),elo=c(1550,1530,1511,1541,1499,1522,1480,1470,1510,1440),date=c("2020-03-08","2020-03-08","2020-03-01","2020-03-08","2020-02-24","2020-02-24","2020-02-24","2020-02-16","2020-02-16","2020-02-16"))

df$team <- as.character(df$team)
df$date <- as.Date(df$date)

order=c("liquid","wtsg","faze")

# This will give me the palette I desire and the order I desire, however, the color progression of the palette will not be in the same order as the legend, which is what I want. 
ggplot(data=df)+
  geom_line(mapping=aes(x=date,y=elo,color=team),size=2)+
  scale_color_discrete(palette="Spectral", breaks=order)

1 Ответ

4 голосов
/ 09 марта 2020

В ответ на ваше редактирование, вместо того, чтобы пытаться устанавливать как пользовательские уровни, так и пользовательскую палитру на лету, было бы легче установить групповые уровни перед построением графика.

df$team <- factor(df$team, levels = order)

ggplot(data = df) +
  geom_line(mapping = aes(x = date, y = elo, color = team), size = 2) +
  scale_color_brewer(palette = "Spectral")

enter image description here

...