首页 文章

在ggplot2中单独的传奇geom_smooth

提问于
浏览
2

我想制作一个非常类似于这个的情节:

library(ggplot2)

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

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

1 回答

  • 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

相关问题