在ggplot2中单独的传奇geom_smooth

时间:2014-03-24 12:02:02

标签: r ggplot2

我想制作一个与此非常相似的情节:

library(ggplot2)

ggplot(data=mtcars, aes(x = wt,y =  mpg, colour = factor(cyl)))  + 
  geom_line() + geom_smooth(method = "lm", se=FALSE, lty = 2)

但是,我特别想在图例中为虚线(线性趋势)和实线(数据)添加不同的条目。这似乎非常微不足道,但由于某种原因,我无法弄清楚这一点。

1 个答案:

答案 0 :(得分:3)

如果您需要在一个组合线型和颜色的图例中显示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=使用cyltype之间的互动。 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))

enter image description here