Легенда не показывает тип линии на графике плотности ggplot2

Я создал график плотности с помощью ggplot из фрейма данных с 3 переменными. Одна линия плотности обозначена пунктиром, но в легенде эта линия показана сплошной линией.

Данные выглядят так:

> head(df)
            R1          R2           R3
1  0.085383867  0.04366546  0.055320885
2  0.059148932  0.03477045  0.040804048
3 -0.181279986 -0.10189900 -0.097218145
4  0.002307494 -0.01137235 -0.003585813
5 -0.047816198 -0.04932982 -0.009389939
6  0.030535090  0.02544292  0.017650949

Код сюжета:

ggplot(data=df)+
  stat_density(aes(x=R1, colour="rho = -0,6"), adjust=4, lwd=0.5, geom="line", position="identity")+
  stat_density(aes(x=R2, colour="rho = 0,6"), adjust=4, lwd=0.5, geom="line", position="identity")+
  stat_density(aes(x=R3, colour="rho = 0"), linetype=2, adjust=4, lwd=0.5, geom="line", position="identity")+
  xlim(-0.5, 0.5)+
  xlab("Renditen")+
  ylab("Dichte")+
  ggtitle("Renditeverteilung im Heston-Modell")+
  theme(plot.title=element_text(face="bold", size=16, vjust=2), axis.title.x=element_text(vjust=-1, size=12), 
          axis.title.y=element_text(vjust=-0.25, size=12), legend.text=element_text(size=12), legend.title=element_text(size=12), legend.margin=unit(1.5, "cm"),
          legend.key.height=unit(1.2, "line"), legend.key.size=unit(0.4, "cm"), legend.key=element_rect(fill=NA), legend.background=element_rect(colour="darkgrey"),
          plot.margin=unit(c(1,1,1,1), "cm"))+
  scale_colour_manual(values=c("rho = -0,6"="red", "rho = 0,6"="blue", "rho = 0"="black"), name="Korrelation")

И, наконец, сюжет:

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

Как я могу заставить легенду показывать пунктирную линию для третьей линии плотности (переменная R3)?

Заранее спасибо!


person FreshF    schedule 04.12.2013    source источник
comment
Ответы ниже хороши, но, PS, вы также можете рассмотреть возможность melting вашего фрейма данных, чтобы избежать нескольких stat_density слоев: stackoverflow.com/a/ 3777592/2441990   -  person Peyton    schedule 04.12.2013


Ответы (2)


Поместите linetype= внутри aes() для каждого stat_density() с теми же именами, что и для colors=, а затем используйте scale_linetype_manual() для установки нужных вам типов. Если вы используете одно и то же имя легенды для типов линий и цветов, обе легенды будут объединены.

ggplot(data=df)+
  stat_density(aes(x=R1, colour="rho = -0,6",linetype="rho = -0,6"), 
                     adjust=4, lwd=0.5, geom="line", position="identity")+
  stat_density(aes(x=R2, colour="rho = 0,6",linetype="rho = 0,6"), 
                     adjust=4, lwd=0.5, geom="line", position="identity")+
  stat_density(aes(x=R3, colour="rho = 0", linetype="rho = 0"), 
                     adjust=4, lwd=0.5, geom="line", position="identity")+
  xlim(-0.5, 0.5)+
  xlab("Renditen")+
  ylab("Dichte")+
  ggtitle("Renditeverteilung im Heston-Modell")+
  theme(plot.title=element_text(face="bold", size=16, vjust=2),  
        axis.title.x=element_text(vjust=-1, size=12), 
        axis.title.y=element_text(vjust=-0.25, size=12), 
        legend.text=element_text(size=12), legend.title=element_text(size=12),
        legend.margin=unit(1.5, "cm"),
        legend.key.height=unit(1.2, "line"), 
        legend.key.size=unit(0.4, "cm"), 
        legend.key=element_rect(fill=NA), 
        legend.background=element_rect(colour="darkgrey"),
        plot.margin=unit(c(1,1,1,1), "cm"))+
  scale_colour_manual(values=c("rho = -0,6"="red", "rho = 0,6"="blue", 
                                "rho = 0"="black"), name="Korrelation")+
  scale_linetype_manual(values=c("rho = -0,6"=1, "rho = 0,6"=1, 
                                "rho = 0"=2), name="Korrelation")

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

person Didzis Elferts    schedule 04.12.2013
comment
Идеальный ответ, именно то, что мне нужно! Спасибо! - person FreshF; 04.12.2013
comment
Аргумент: имя=Корреляция должен быть добавлен в дополнение к использованию одного и того же имени для цвета и типа линии. - person Abhishek; 16.08.2018

Правило простое:

 each aes is key in the legend.

Поскольку ваши типы линий не указаны в aes , они не отображаются в легенде.

Вот пример:

library(ggplot2)

ggplot(mtcars) +
  geom_line(aes(x=mpg,y=cyl,linetype='2')) +
  geom_line(aes(x=mpg,y=disp,linetype='3')) + 
  scale_linetype_discrete(name = "Lines Types  aes")

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

person agstudy    schedule 04.12.2013