Неверный тип линии в легенде ggplot2 в R

Я создал график ggplot2 в R, где линия сопровождается затененным доверительным интервалом. Однако, легенда показывает неправильный цвет и символ. Использование scale_size_manual, похоже, не исправляет проблему.

Сценарий:

Входные данные:

my_example_data <- data.frame(Price = c(5,0,-5), Consumption = c(20,0,-20), Lower = c(17,-3,-21), Upper = c(21, 2, 23))
my_example_data.melt <- melt(my_example_data, id = "Price")

 Price variable value
1 5 Consumption 20
2 0 Consumption 0
3 -5 Consumption -20
4 5 Lower 17
5 0 Lower -3
6 -5 Lower -21
7 5 Upper 21
8 0 Upper 2
9 -5 Upper 23

Код для создания сюжета:

ggplot(subset(my_example_data.melt, variable == "Consumption"), aes(Price,value,fill='Mean response'), linetype=1) +
geom_line(colour="#000000") +
coord_cartesian(xlim = c(-100, 100),ylim = c(-0.75, 1)) +
geom_ribbon(aes(ymin = subset(my_example_data.melt, variable == "Lower")$value, ymax = subset(my_example_data.melt, variable == "Upper")$value,fill = 'SD of response'),alpha=0.3, colour=NA) +
xlab("Change in relative price [Δ€]") +
ylab("Change in consumption [MW]") +
theme(legend.position="bottom", legend.direction="horizontal") +
xlab("Change in relative price [Δ€]") +
ylab("Change in consumption [MW]") +
scale_fill_discrete("")

Есть ли опция ручного переопределения для изменения типов линий и цвета для сюжета и легенды без необходимости добавлять дополнительную информацию в расплавленный блок данных?

1 ответ

Это гораздо проще, чем использование расплавленных данных.

Также цитируя из " Удалить дополнительные легенды" в ggplot2,

Эстетика может быть установлена или отображена в вызове ggplot.

  • Эстетика, определенная внутри aes (...), отображается из данных и создается легенда.
  • Эстетичность также может быть установлена на одно значение, определяя ее вне aes().

Поэтому что-то вроде

ggplot(my_example_data,aes(x=Price)) + 
 geom_ribbon(aes(ymin=Lower,ymax=Upper),fill='blue',alpha=0.5) + 
 geom_line(aes(y=Consumption))

или, возможно, если вам действительно нужна легенда, вы можете использовать scale_identity

ggplot(my_example_data,aes(x=Price)) + 
 geom_ribbon(aes(ymin=Lower,ymax=Upper,fill='blue'), alpha=0.5) + 
 geom_line(aes(y=Consumption)) + 
 scale_fill_identity(guide='legend', name = 'Your name', label = 'whatever')

licensed under cc by-sa 3.0 with attribution.