[英]separate legend geom_smooth in ggplot2
我想绘制一个与此图非常相似的图:
library(ggplot2)
ggplot(data=mtcars, aes(x = wt,y = mpg, colour = factor(cyl))) +
geom_line() + geom_smooth(method = "lm", se=FALSE, lty = 2)
但是,我特别希望图例中的虚线(线性趋势)和实线(数据)有所不同。 这似乎很琐碎,但由于某些原因,我无法弄清楚。
如果您需要在一个结合线型和颜色的图例中显示6个不同的级别,则一种解决方案是通过线性模型制作包含原始mpg
值和预测值的新数据框。
制作新的数据框mtcars2
,其中mgp
被替换为预测值。
library(plyr)
mtcars2<-ddply(mtcars,.(cyl),mutate,mpg=predict(lm(mpg~wt)))
将新列添加到mtcars
和新数据框以显示真实数据和预测数据
mtcars$type<-"real"
mtcars2$type<-"pred"
合并两个数据帧。
mtcars.new<-rbind(mtcars,mtcars2)
现在使用组合数据框绘制数据,对于color=
和lty=
使用cyl
和type
之间的相互作用。 使用scale_color_manual()
和scale_linetype_manual()
更改颜色和线型的值。
ggplot(mtcars.new,aes(x=wt,y=mpg,color=interaction(type,factor(cyl)),
lty=interaction(type,factor(cyl))))+
geom_line()+
scale_color_manual("Legend",values=c("red","red",
"green","green","blue","blue"))+
scale_linetype_manual("Legend",values=c(2,1,2,1,2,1))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.