Вопрос или проблема
У меня есть проблема с пакетом “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
для всех линий в эстетических параметрах.
Решение, которое вы нашли, правильное и заключается в следующем:
-
Укажите
linetype
для всех линий: Важно, чтобы эстетикаlinetype
была определена в пределах каждого вызоваgeom_line()
. Если вы не укажетеlinetype
для линии, эта информация не будет включена в легенду. -
Используйте
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
, не стесняйтесь обращаться!