Добавление легенды в ggplot2 с несколькими строками на графике

Я был бы очень признателен за помощь с этим. Я совершенно не понимаю, как ggplot2 думает о легендах!

Диаграмма основана на следующем фрейме данных, который называется "meltdf":

        xval       variable  value
1   0.000000 Shortfall Risk 100.00
2   4.624457 Shortfall Risk  99.83
3   9.179656 Shortfall Risk  60.96
4  13.742579 Shortfall Risk  36.29
5  18.620338 Shortfall Risk  27.71
6  22.947704 Shortfall Risk  22.52
7  27.690638 Shortfall Risk  19.72
8  32.174379 Shortfall Risk  17.89
9  36.637940 Shortfall Risk  15.79
10 41.107962 Shortfall Risk  15.96
11 45.644065 Shortfall Risk  15.97

График составлен следующим образом:

ggplot(data=meltdf,aes(x=xval,y=value))+
  geom_line(size=1,colour=rgb(69,99,111,max=255))+
  geom_vline(xintercept = 22 ,colour="darkgray")+
  geom_vline(xintercept = 30 ,colour="darkred")+
  theme_bw()+
  labs(title="Shortfall Risk versus Investment Risk, Meeting Expenditure Only")+
  theme(legend.position="bottom",
    legend.text = element_text(size=9),
    axis.text = element_text(size=9),
    axis.title = element_text(size=9),
    plot.title=element_text(size = 9),
    legend.title=element_text(size=9))+
  labs(x="Largest Historical Decline (%)", y="Probability of Shortfall (%)")+
  scale_y_continuous(limits = c(0, 100))

Я хотел бы иметь легенду внизу, в которой названы все три линии на графике (синий, красный и серый).

1 ответ

Решение

ggplot автоматически создаст легенду для элементов (цвета, тип линии и т. д.) , которые отображаются внутри aes() звоните. Это означает, что вы не получите легенду, когда будете вручную указывать цвет элемента, как вы делаете здесь (все ваши colour заявления не внутри aes).

Я рекомендую вам хранить координаты ваших вертикальных линий в их собственном фрейме данных, где они могут быть сопоставлены с переменной, дающей их цвет. Вот я создаю такой фрейм данных (summ) и переписал свой код для geom_vline(), Я также нанес на карту meltdf$variable в colour в geom_vline таким образом, это появляется в легенде. Наконец я добавил scale_colour_manual() выбрать цвета. Вы можете адаптировать значение summ$colour поэтому они имеют смысл в легенде.

summ <- data.frame(x=c(22,30),
                   colour=c("gray","red"))

ggplot(data=meltdf,aes(x=xval,y=value))+
  geom_line(size=1,aes(colour=variable))+
  geom_vline(data=summ,aes(xintercept = x,colour=colour))+
  scale_color_manual(values = c(rgb(69,99,111,max=255),"darkgray","darkred")) +
  theme_bw()+
  labs(title="Shortfall Risk versus Investment Risk, Meeting Expenditure Only")+
  theme(legend.position="bottom",
        legend.text = element_text(size=9),
        axis.text = element_text(size=9),
        axis.title = element_text(size=9),
        plot.title=element_text(size = 9),
        legend.title=element_text(size=9))+
  labs(x="Largest Historical Decline (%)", y="Probability of Shortfall (%)")+
  scale_y_continuous(limits = c(0, 100))

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

Другие вопросы по тегам