楼主: 哈啊哈11
3664 6

[程序分享] ggplot绘图,怎样把不同方法拟合的趋势线的图例加进去? [推广有奖]

  • 0关注
  • 0粉丝

副教授

31%

还不是VIP/贵宾

-

威望
0
论坛币
82 个
通用积分
27.1430
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
20918 点
帖子
363
精华
0
在线时间
391 小时
注册时间
2016-7-29
最后登录
2024-6-17

楼主
哈啊哈11 发表于 2020-4-23 06:55:39 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
ggplot绘图,代码如下,分别用四种方法拟合了趋势线,这四个趋势线的图例如何添加?
每种趋势线都要同时用 颜色、线宽、线型三个要素表示。
求各位指点。

  1. ggplot(mtcars,aes(mpg,wt))+
  2.   geom_point()+
  3.   geom_smooth(method='lm',se=FALSE,show.legend=TRUE,
  4.               linetype=1,color='black',size = 1)+
  5.   geom_smooth(formula=y~poly(x,2),se=FALSE,show.legend=TRUE,
  6.               linetype=2,color='blue',size=1.2)+
  7.   geom_smooth(method='gam',se=FALSE,show.legend=TRUE,
  8.               linetype=3,color='gold',size=1.5)+
  9.   stat_function(fun = function(x) -0.08*x +5, linetype=4,
  10.                 show.legend=TRUE,size=2,color='red')
复制代码


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:ggplot绘图 gplot plot GPL function

沙发
caozhaowen 在职认证  发表于 2020-4-25 00:54:35
  1. ggplot(mtcars,aes(mpg,wt))+
  2.   geom_point(aes(size=1))+
  3.   geom_smooth(method='lm',se=FALSE,
  4.               linetype=1,aes(color='black',size = 1))+
  5.   geom_smooth(formula=y~poly(x,2),se=FALSE,
  6.               linetype=2,aes(color='blue',size=1.2))+
  7.   geom_smooth(method='gam',se=FALSE,
  8.               linetype=3,aes(color='gold',size=1.5))+
  9.   stat_function(fun = function(x) -0.08*x +5, linetype=4,
  10.                 aes(size=2,color='red'))
复制代码

但是不能显到一起。这个有点麻烦。

藤椅
zerofung 学生认证  发表于 2020-4-25 12:16:58
看到这个题目很感兴趣,研究了一阵子,终于发现问题在哪了
首先,像上一层说的,要放到aes里,因为legend对应的是映射,不放aes里头不可能会有legend
然后,size跟另外两个指标不一样,是连续变量,而linetype和color是分类变量,在制作legend的时候,不可能合并,因此要么去掉size的legend,要么size单独显示
最后,就是下面代码那样,只要指定了同一个legend名称和对应的labels,分类变量可以合并成一个legend
  1. ggplot(mtcars,aes(mpg,wt))+
  2.   geom_point()+
  3.   geom_smooth(method='lm',se=FALSE,aes(linetype="1",color='black',size = 1))+
  4.   geom_smooth(formula=y~poly(x,2),se=FALSE,aes(linetype="2",color='blue',size=1.2))+
  5.   geom_smooth(method='gam',se=FALSE,aes(linetype="3",color='gold',size=1.5))+
  6.   stat_function(fun = function(x) -0.08*x +5, aes(linetype="4",size=2,color='red')) +
  7.   scale_color_manual(name = "method",labels = c("lm","y~poly(x,2)","gam","-0.08*x +5"),values = c("black","blue","gold","red")) +
  8.   scale_linetype_manual(name = "method",labels = c("lm","y~poly(x,2)","gam","-0.08*x +5"),values = c(1,2,3,4)) +
  9.   guides(size = "none")
复制代码



板凳
哈啊哈11 发表于 2020-4-25 14:51:02
zerofung 发表于 2020-4-25 12:16
看到这个题目很感兴趣,研究了一阵子,终于发现问题在哪了
首先,像上一层说的,要放到aes里,因为legend对 ...
size与线型、颜色不同类,这点很关键。。。图中点据的图例能整合进去吗,我是说在图例里共有五个元素:四个线型加一个点形状。

报纸
哈啊哈11 发表于 2020-4-25 14:51:22
caozhaowen 发表于 2020-4-25 00:54
但是不能显到一起。这个有点麻烦。
感谢指点

地板
zerofung 学生认证  发表于 2020-4-25 23:31:19
哈啊哈11 发表于 2020-4-25 14:51
感谢指点
还是相似的问题,point是没有linetype的,这就导致了,要么合并但会给point的legend加一条横线,要么point分开单独一个legend。与其用代码实现,不如导出到pdf用AI或者Acrobat或者PS自己做一个
  1. ggplot(mtcars,aes(mpg,wt))+
  2.   geom_point(aes(color = "1",linetype = "1"))+
  3.   geom_smooth(method='lm',se=FALSE,aes(linetype="2",color='2',size = 1))+
  4.   geom_smooth(formula=y~poly(x,2),se=FALSE,aes(linetype="3",color='3',size=1.2))+
  5.   geom_smooth(method='gam',se=FALSE,aes(linetype="4",color='4',size=1.5))+
  6.   stat_function(fun = function(x) -0.08*x +5, aes(linetype="5",size=2,color='red')) +
  7.   scale_color_manual(name = "method",labels = c("point","lm","y~poly(x,2)","gam","-0.08*x +5"),values = c("green","black","blue","gold","red")) +
  8.   scale_linetype_manual(name = "method",labels = c("point","lm","y~poly(x,2)","gam","-0.08*x +5"),values = c(1,2,3,4,5)) +
  9.   guides(size = "none")
复制代码

7
哈啊哈11 发表于 2020-4-26 06:44:27
zerofung 发表于 2020-4-25 23:31
还是相似的问题,point是没有linetype的,这就导致了,要么合并但会给point的legend加一条横线,要么poin ...
多谢指教。。。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-26 21:04