Как установить цветовую палитру так, чтобы она начиналась с самого темного цвета, когда более старые данные были светлее текущих?

Я строю график корреляционного рассеяния, где мой фрейм данных содержит временные данные, а год начала является произвольным. В этом случае теперь у меня есть следующий R код

## Set seed for randomness in dummy data: ##
set.seed(123)

## Create data frame: ##
df.Data <- data.frame(date = seq(as.Date('2019-01-01'), by = '1 day', length.out = 650),
                      DE = rnorm(650, 2, 1), AT = rnorm(650, 5, 2))
corPearson <- cor.test(x = df.Data$DE, y = df.Data$AT, method = "pearson")

df.Data$year <- format(as.Date(df.Data$date), '%Y')
  
## PLOT: ##
p <- ggplot(data = df.Data, aes(x = DE, y = AT, group = 1)
      ) +
      geom_point(aes(color = year)) + 
      geom_smooth(method = "lm", se = FALSE, color = "#007d3c") +
      theme_classic() +
      theme(legend.position = "none") +
      theme(panel.background = element_blank()) +
      scale_colour_brewer(palette = 'Greens') + 
      xlab("PEGAS TTF M1") +
      ylab("EEX DEB M1") +
      ggtitle("Correlation Scatter Plot (Pearson)") +
      theme(plot.title = element_text(hjust = 0.5, face = "bold"))
    
    ## Correlation plot converting from ggplot to plotly: #
    CorrelationPlot <- plotly::ggplotly(p, tooltip = "text")

что дает следующий результат:

введите описание изображения здесь

Моя проблема заключается в цветовой палитре. Я использую цветовую палитру Greens, в которой данные за 2020 год отображаются более темным зеленым цветом, чем данные за 2019 год, которые я хотел бы оставить как есть.

Тем не менее, я бы хотел начать с более темных оттенков зеленого, например данные за 2020 год отмечены зеленой красной стрелкой, данные 2019 года - зеленой синей стрелкой.

введите описание изображения здесь

Как я могу это сделать?


person MikiK    schedule 01.10.2020    source источник


Ответы (1)


Вы можете использовать scale_color_manual для установки собственных цветов:

library(ggplot2)
library(RColorBrewer)

## Set seed for randomness in dummy data: ##
set.seed(123)

## Create data frame: ##
df.Data <- data.frame(date = seq(as.Date('2019-01-01'), by = '1 day', length.out = 650),
                      DE = rnorm(650, 2, 1), AT = rnorm(650, 5, 2))
corPearson <- cor.test(x = df.Data$DE, y = df.Data$AT, method = "pearson")

df.Data$year <- format(as.Date(df.Data$date), '%Y')

## PLOT: ##
p <- ggplot(data = df.Data, aes(x = DE, y = AT, group = 1)
) +
  geom_point(aes(color = year)) + 
  geom_smooth(method = "lm", se = FALSE, color = "#007d3c") +
  theme_classic() +
  theme(legend.position = "none") +
  theme(panel.background = element_blank()) +
  scale_color_manual(values=colorRampPalette(brewer.pal(n = 8, name = "Greens")[7:8])( length(unique(df.Data$year)) )) + 
  xlab(df.Data$DE) +
  ylab(df.Data$AT) +
  ggtitle("Correlation Scatter Plot (Pearson)") +
  theme(plot.title = element_text(hjust = 0.5, face = "bold"))

p

## Correlation plot converting from ggplot to plotly: #
CorrelationPlot <- plotly::ggplotly(p, tooltip = "text")

результат

person ismirsehregal    schedule 01.10.2020
comment
Спасибо! Я определил свою собственную цветовую схему следующим образом: scale_color_manual(values = c("#DCF1D5", "#B4DCAB", "#81C07A", "#419F44", "#007d3c")) (от светлого к темному). Если у меня есть данные только за 2019 и 2020 годы, тогда цвета должны быть "#007d3c" для 2020 и "#419F44" для 2019. - person MikiK; 01.10.2020
comment
Временные данные произвольны, возможно, у меня есть данные с 2016 по 2020 год. Тогда моя собственная цветовая палитра также должна работать таким же образом, а именно "#007d3c" для 2020 года и так далее .... Как я могу это сделать ? - person MikiK; 01.10.2020
comment
Пожалуйста, посмотрите мою правку. Теперь с помощью colorRampPalette создается настраиваемая палитра на основе уникального количества лет, доступного в данных. - person ismirsehregal; 01.10.2020
comment
Можно ли использовать только каждый второй цвет? Потому что, когда я рисую данные с 2017 по 2020 год, мне очень и очень трудно увидеть разницу в цвете между 2020 и 2019 (или 2016 и 2017). - person MikiK; 01.10.2020
comment
Вы можете просто установить начальный цвет пользовательской палитры на более светло-зеленый, например. scale_color_manual(values=colorRampPalette(brewer.pal(n = 8, name = "Greens")[c(3,8)])( length(unique(df.Data$year)) )). или используйте свои цвета напрямую: scale_color_manual(values= tail(c("#DCF1D5", "#B4DCAB", "#81C07A", "#419F44", "#007d3c"), length(unique(df.Data$year)))) - person ismirsehregal; 01.10.2020
comment
Спасибо за вашу помощь и время. - person MikiK; 01.10.2020