Как изменить тип линии в легенде в ggplot в R

Вопрос или проблема

У меня есть проблема с пакетом “ggplot2”, где я не могу получить типы линий в легенде.
введите описание изображения здесь
Легенда показывает только цвет каждой линии, но не конкретный тип.

Мой код выглядит так:

ggplot(data = vStdDevHours, aes(x=Hours)) +
  geom_line(aes(y = Yearly_DA, colour = "Yearly_DA")) +
  geom_line(aes(y = Winter_DA, colour = "Winter_DA")) +
  geom_line(aes(y = Spring_DA, colour = "Spring_DA")) +
  geom_line(aes(y = Summer_DA, colour = "Summer_DA")) +
  geom_line(aes(y = Fall_DA, colour = "Fall_DA")) +
  geom_line(aes(y = Yearly_RT, colour = "Yearly_RT", linetype = "Yearly_RT")) +
  geom_line(aes(y = Winter_RT, colour = "Winter_RT", linetype = "Winter_RT")) +
  geom_line(aes(y = Spring_RT, colour = "Spring_RT", linetype = "Spring_RT")) +
  geom_line(aes(y = Summer_RT, colour = "Summer_RT", linetype = "Summer_RT")) +
  geom_line(aes(y = Fall_RT, colour = "Fall_RT", linetype = "Fall_RT")) +
  scale_y_continuous(breaks=seq(0, 130, 10), limits=c(0, 130)) +
  scale_x_continuous(breaks = seq(1, 24, 1)) +
  ggtitle("Годовое и сезонное стандартное отклонение цен в реальном времени") +
  ylab("Цена") +
  xlab("Часы") +
  scale_linetype_manual(name = "Ст. откл.", values = c("Winter_DA" = "solid", "Winter_RT" = "dashed", "Fall_DA" = "solid", "Fall_RT" = "dashed", "Summer_DA" = "solid", 
                                                       "Summer_RT" = "dashed", "Spring_DA" = "solid", "Spring_RT" = "dashed", "Yearly_DA" = "solid", "Yearly_RT" = "dashed"))  +
  scale_colour_manual(name ="Ст. откл.", values = c("Winter_DA" = "darkred", "Winter_RT" = "darkred", "Fall_DA" = "steelblue", "Fall_RT" = "steelblue", 
                                                      "Summer_DA" = "forestgreen", "Summer_RT" = "forestgreen", "Spring_DA" = "purple", "Spring_RT" = "purple", 
                                                      "Yearly_DA" = "black", "Yearly_RT" = "black")) + 
  theme_bw() + theme(plot.title = element_text(hjust = 0.5))

Я знаю, что это связано с scale_linetype_manual, но все обходные пути, которые я пробовал, не увенчались успехом.

Надеюсь, что какой-нибудь волшебник ggplot сможет мне помочь, заранее спасибо!

Решено:

ggplot(data = vStdDevHours, aes(x=Hours)) +
  geom_line(aes(y = Yearly_DA, colour = "Yearly_DA", linetype = "Yearly_DA")) +
  geom_line(aes(y = Winter_DA, colour = "Winter_DA", linetype = "Winter_DA")) +
  geom_line(aes(y = Spring_DA, colour = "Spring_DA", linetype = "Spring_DA")) +
  geom_line(aes(y = Summer_DA, colour = "Summer_DA", linetype = "Summer_DA")) +
  geom_line(aes(y = Fall_DA, colour = "Fall_DA", linetype = "Fall_DA")) +
  geom_line(aes(y = Yearly_RT, colour = "Yearly_RT", linetype = "Yearly_RT")) +
  geom_line(aes(y = Winter_RT, colour = "Winter_RT", linetype = "Winter_RT")) +
  geom_line(aes(y = Spring_RT, colour = "Spring_RT", linetype = "Spring_RT")) +
  geom_line(aes(y = Summer_RT, colour = "Summer_RT", linetype = "Summer_RT")) +
  geom_line(aes(y = Fall_RT, colour = "Fall_RT", linetype = "Fall_RT")) +
  scale_y_continuous(breaks=seq(0, 130, 10), limits=c(0, 130)) +
  scale_x_continuous(breaks = seq(1, 24, 1)) +
  ggtitle("Годовое и сезонное стандартное отклонение цен в реальном времени") +
  ylab("Цена") +
  xlab("Часы") +
  scale_linetype_manual(name = "Ст. откл.", values = c("Winter_DA" = "solid", "Winter_RT" = "dashed", "Fall_DA" = "solid", "Fall_RT" = "dashed", "Summer_DA" = "solid", "Summer_RT" = "dashed",
                                                      "Spring_DA" = "solid", "Spring_RT" = "dashed", "Yearly_DA" = "solid", "Yearly_RT" = "dashed"))  +
  scale_colour_manual(name ="Ст. откл.", values = c("Winter_DA" = "darkred", "Winter_RT" = "darkred", "Fall_DA" = "steelblue", "Fall_RT" = "steelblue", 
                                                      "Summer_DA" = "forestgreen", "Summer_RT" = "forestgreen", "Spring_DA" = "purple", "Spring_RT" = "purple", 
                                                      "Yearly_DA" = "black", "Yearly_RT" = "black")) + 
  theme_bw() + theme(plot.title = element_text(hjust = 0.5))

Ответ или решение

Для изменения типа линий в легенде при использовании пакета ggplot2 в R важно правильно задать эстетические параметры для линеек в функции geom_line(). В вашем исходном коде проблема заключалась в том, что вы не указали linetype для всех линий в эстетических параметрах.

Решение, которое вы нашли, правильное и заключается в следующем:

  1. Укажите linetype для всех линий: Важно, чтобы эстетика linetype была определена в пределах каждого вызова geom_line(). Если вы не укажете linetype для линии, эта информация не будет включена в легенду.

  2. Используйте scale_linetype_manual для настройки типов линий: После указания типов линий в geom_line() необходимо настроить ручное отображение линеек в легенде с помощью функции scale_linetype_manual(). Это позволит вам легко управлять типами линий в соответствии с вашими требованиями.

Вот полный и исправленный код на основе вашего решения:

ggplot(data = vStdDevHours, aes(x = Hours)) +
  geom_line(aes(y = Yearly_DA, colour = "Yearly_DA", linetype = "Yearly_DA")) +
  geom_line(aes(y = Winter_DA, colour = "Winter_DA", linetype = "Winter_DA")) +
  geom_line(aes(y = Spring_DA, colour = "Spring_DA", linetype = "Spring_DA")) +
  geom_line(aes(y = Summer_DA, colour = "Summer_DA", linetype = "Summer_DA")) +
  geom_line(aes(y = Fall_DA, colour = "Fall_DA", linetype = "Fall_DA")) +
  geom_line(aes(y = Yearly_RT, colour = "Yearly_RT", linetype = "Yearly_RT")) +
  geom_line(aes(y = Winter_RT, colour = "Winter_RT", linetype = "Winter_RT")) +
  geom_line(aes(y = Spring_RT, colour = "Spring_RT", linetype = "Spring_RT")) +
  geom_line(aes(y = Summer_RT, colour = "Summer_RT", linetype = "Summer_RT")) +
  geom_line(aes(y = Fall_RT, colour = "Fall_RT", linetype = "Fall_RT")) +
  scale_y_continuous(breaks = seq(0, 130, 10), limits = c(0, 130)) +
  scale_x_continuous(breaks = seq(1, 24, 1)) +
  ggtitle("Годовая и сезонная стандартная девиация цен в реальном времени") +
  ylab("Цена") +
  xlab("Часы") +
  scale_linetype_manual(name = "Std. Dev.", values = c("Winter_DA" = "solid", 
                                                       "Winter_RT" = "dashed", 
                                                       "Fall_DA" = "solid", 
                                                       "Fall_RT" = "dashed", 
                                                       "Summer_DA" = "solid", 
                                                       "Summer_RT" = "dashed", 
                                                       "Spring_DA" = "solid", 
                                                       "Spring_RT" = "dashed", 
                                                       "Yearly_DA" = "solid", 
                                                       "Yearly_RT" = "dashed")) +
  scale_colour_manual(name = "Std. Dev.", values = c("Winter_DA" = "darkred", 
                                                       "Winter_RT" = "darkred", 
                                                       "Fall_DA" = "steelblue", 
                                                       "Fall_RT" = "steelblue", 
                                                       "Summer_DA" = "forestgreen", 
                                                       "Summer_RT" = "forestgreen", 
                                                       "Spring_DA" = "purple", 
                                                       "Spring_RT" = "purple", 
                                                       "Yearly_DA" = "black", 
                                                       "Yearly_RT" = "black")) + 
  theme_bw() + 
  theme(plot.title = element_text(hjust = 0.5))

Обратите внимание на следующее:

  • Эстетики: В каждой функции geom_line() важна настройка как colour, так и linetype.
  • Легенда: Теперь легенда будет правильно отображать как цвета, так и типы линий для каждой группы данных, что значительно улучшит визуализацию графика и понимание представленной информации.

Если у вас возникнут дополнительные вопросы или понадобится помощь по другим аспектам ggplot2, не стесняйтесь обращаться!

Оцените материал
Добавить комментарий

Капча загружается...