楼主: GAILY2014
9020 5

[问答] 两条曲线之间阴影填充并指定颜色 [推广有奖]

  • 0关注
  • 0粉丝

大专生

86%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
1.0000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
158 点
帖子
9
精华
0
在线时间
119 小时
注册时间
2014-10-16
最后登录
2020-7-19

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我有两条曲线x1,x2,想在两条曲线之间填充阴影,并且x1大于x2时阴影为蓝色,x1小于于x2时阴影为绿色。
有没有大神知道怎么用ggplot做出来呢?
二维码

扫码加我 拉你入群

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

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

关键词:怎么用 有没有

line.png (8.75 KB)

line.png

沙发
marshall001 学生认证  发表于 2019-3-3 18:04:24 来自手机 |只看作者 |坛友微信交流群
GAILY2014 发表于 2019-2-26 18:39
我有两条曲线x1,x2,想在两条曲线之间填充阴影,并且x1大于x2时阴影为蓝色,x1小于于x2时阴影为绿色。
有 ...
如果时间精力有限,摸索代码耗时过长,以下“偏方”,仅供参考:<br>
导出图像(.eps)格式,然后在AI界面内,右键解除合并,再进一步针对目标区域进行编辑。

使用道具

藤椅
Luke@ruc 在职认证  发表于 2019-7-14 00:41:33 |只看作者 |坛友微信交流群
使用geom_ribbon函数

使用道具

板凳
zhou1_20 发表于 2019-7-14 17:26:31 |只看作者 |坛友微信交流群

给你个例子参考下吧
  1. x=seq(1.1,10,len=100)
  2. y1=log(x)
  3. y2=sin(x)+1.4

  4. plot(x,y1,type = 'l',lwd=4,ylim = c(0,3.3),ylab = 'y')
  5. lines(x,y2,lwd=4,col=2)
  6. #find change point of abs(y1/y2)
  7. end_id = function(id1){
  8.   if(max(id1)!=length(x)){
  9.     return(c(max(id1),length(x)))
  10.   }else{
  11.     return(length(x))
  12.   }
  13. }
  14. id1=which(abs(y1/y2)<=1)
  15. id2=which(diff(id1)>1)
  16. id = c(1,id1[id2:(id2+1)],end_id(id1))
  17. for (i in 1:(length(id)-1)) {
  18.   y1x = y1[id[i]:id[i+1]]
  19.   y2x = y2[id[i]:id[i+1]]
  20.   xx = x[id[i]:id[i+1]]
  21.   #判断每个区域中间的点是否满足条件
  22.   if(all(y1x[2:4]>y2x[2:4])){
  23.     polygon(c(xx,rev(xx)),c(y2x,rev(y1x)),col = 3)
  24.   }else{
  25.     polygon(c(xx,rev(xx)),c(y1x,rev(y2x)),col = 4)
  26.   }
  27. }
  28. legend('topright',c('y1=log(x)','y2=sin(x)+1.4','y1/y2>1','y1/y2<1'),
  29.        col = 1:4, lty = c(1,1,NA,NA),pch = c(NA,NA,15,15))
复制代码
Rplot01.png

使用道具

报纸
zhou1_20 发表于 2019-7-14 19:11:12 |只看作者 |坛友微信交流群
ggplot版本
  1. x=seq(1.1,10,len=100)
  2. y1=function(x) log(x)
  3. y2=function(x) sin(x)+1.4
  4. #找y1,y2的焦点

  5. q=rootSolve::uniroot.all(function(x) y1(x)-y2(x),range(x))
  6. p <- y1(q)

  7. p1=ggplot() +
  8.   stat_function(aes(x, color = "y1"), fun = y1, size = 1) +
  9.   stat_function(aes(x, color = "y2"), fun = y2, size = 1)

  10. z1 <- seq(1.1, q[1], 0.01)
  11. z2 <- seq(q[1], q[2], 0.01)
  12. z3 <- seq(q[2], q[3], 0.01)
  13. z4 <- seq(q[3], 10, 0.01)
  14. p1 +
  15.   geom_ribbon(aes(x = z1, ymin = y1(z1), ymax = y2(z1), fill = "y1/y2<1"),
  16.               alpha = 0.5)+
  17.   geom_ribbon(aes(x = z2, ymin = y2(z2), ymax = y1(z2), fill = "y1/y2>1"),
  18.               alpha = 0.5)+
  19.   geom_ribbon(aes(x = z3, ymin = y1(z3), ymax = y2(z3), fill = "y1/y2<1"),
  20.               alpha = 0.5)+
  21.   geom_ribbon(aes(x = z4, ymin = y2(z4), ymax = y1(z4), fill = "y1/y2>1"),
  22.               alpha = 0.5)+
  23.   theme_bw() +
  24.   scale_y_continuous(limits = c(0,3.3))+
  25.   theme(panel.grid = element_blank(),
  26.         legend.position = c(0.95, 0.99),
  27.         legend.justification = c(1, 1),
  28.         legend.spacing = unit(0, "cm"),
  29.         legend.margin = margin(0, 0, 0, 0, "cm")) +
  30.   scale_fill_manual(values = c("blue", "orange"), name = "") +
  31.   scale_color_manual(values = c("black", "red"), name = "")
  32.   
复制代码




Rplot01.png

使用道具

地板
GAILY2014 发表于 2019-7-19 16:22:30 |只看作者 |坛友微信交流群
zhou1_20 发表于 2019-7-14 19:11
ggplot版本
感谢

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-1 12:37