【问题标题】:how to use ggplot, geom_line and geom_ribbon to draw multiple y axis in a layout如何使用 ggplot、geom_line 和 geom_ribbon 在布局中绘制多个 y 轴
【发布时间】:2021-07-29 02:37:17
【问题描述】:

底部有不同的数据集。

1-1.数据集(cidf_min.csv)
name number value samples conf lower upper level
apple 1 0.056008 100 0.95 0.05458 0.059141 2
apple 2 0.048256 100 0.95 0.046363 0.059142 2
apple 3 0.042819 100 0.95 0.040164 0.059143 2
apple 4 0.038663 100 0.95 0.035155 0.059144 2
apple 5 0.035325 100 0.95 0.030146 0.059145 2
1-2.数据集(newdf_min.csv)
name number value samples conf lower upper level max
apple 2 0.01854 100 0.95 -0.06963 0.045235 2 2
  '''code'''
  cidf<-read.csv("D:/cidf_min.csv")
  newdf<-read.csv("D:/newdf_min.csv")
  p_min<-ggplot(cidf, aes(x=number, y=value, group=name))+geom_line(aes(color=level))+geom_ribbon(aes(ymin=lower, ymax=upper, fill=level, group=name), alpha=0.3)+geom_text(data=newdf, aes(label=name, color=level), hjust=-0.2, vjust=0.5, size=3, show.legend=F)+coord_cartesian(xlim=c(0,max(cidf$number)*1.2))+xlab(~"Con (\u00D7"~C[max]*")")+ylab(~"score ("*mu*"C/"*mu*"F)")+theme_bw()
2-1.数据集(cidf_max.csv)
name number value samples conf lower upper level
apple 1 0.068832 100 0.95 0.061945 0.069416 2
apple 2 0.065256 100 0.95 0.053687 0.065841 2
apple 3 0.060492 100 0.95 0.046201 0.06155 2
apple 4 0.05585 100 0.95 0.039848 0.058739 2
apple 5 0.047585 100 0.95 0.033555 0.056066 2
2-2.数据集(newdf_max.csv)
name number value samples conf lower upper level max
apple 2 0.024221 100 0.95 -0.04546 0.076362 2 2
  '''code'''
  cidf<-read.csv("D:/cidf_max.csv")
  newdf<-read.csv("D:/newdf_max.csv")
  p_max<-ggplot(cidf, aes(x=number, y=value, group=name))+geom_line(aes(color=level))+geom_ribbon(aes(ymin=lower, ymax=upper, fill=level, group=name), alpha=0.3)+geom_text(data=newdf, aes(label=name, color=level), hjust=-0.2, vjust=0.5, size=3, show.legend=F)+coord_cartesian(xlim=c(0,max(cidf$number)*1.2))+xlab(~"Con (\u00D7"~C[max]*")")+ylab(~"score ("*mu*"C/"*mu*"F)")+theme_bw()
3-1.数据集(cidf_mean.csv)
name number value samples conf lower upper level
apple 1 0.069673 100 0.95 0.069673 0.069673 2
apple 2 0.06133 100 0.95 0.057955 0.062792 2
apple 3 0.060497 100 0.95 0.046201 0.06155 2
apple 4 0.054623 100 0.95 0.044241 0.058739 2
apple 5 0.039852 100 0.95 0.031906 0.043719 2
3-2.数据集(newdf_mean.csv)
name number value samples conf lower upper level max
apple 2 0.014323 100 0.95 -0.06793 0.045717 2 2
  '''code'''
  cidf<-read.csv("D:/cidf_mean.csv")
  newdf<-read.csv("D:/newdf_mean.csv")
  p_mean<-ggplot(cidf, aes(x=number, y=value, group=name))+geom_line(aes(color=level))+geom_ribbon(aes(ymin=lower, ymax=upper, fill=level, group=name), alpha=0.3)+geom_text(data=newdf, aes(label=name, color=level), hjust=-0.2, vjust=0.5, size=3, show.legend=F)+coord_cartesian(xlim=c(0,max(cidf$number)*1.2))+xlab(~"Con (\u00D7"~C[max]*")")+ylab(~"score ("*mu*"C/"*mu*"F)")+theme_bw()



  

我已经使用ggplotgeom_linegeom_ribbon等代码绘制了3个图。

  1. 我想合并p_minp_maxp_mean 的图。

  2. p_minp_maxp_mean 必须位于 y 轴上。

  3. x 轴是数字(1,2,3,4,5)。

让我知道如何在布局中使用复变量绘制多个 y 轴的图。

【问题讨论】:

  • 请提供一个可复现的例子,如果我们不能复现你的代码,很难帮助你(到目前为止还没有简单的方法来提取你的数据表)见这里:stackoverflow.com/help/minimal-reproducible-example跨度>
  • @yuliaUU 连接您以将结果示例的图片显示为链接。您可以点击上方的蓝色字符。
  • 问题是为了帮助你,我必须运行你的代码,这样我才能给你写一个解决方案。我不能这样做,因为我的计算机上不存在“D:/cidf_min.csv”。
  • @yuliaUU 我已经上传了上面“##1-1, 1-2, 2-1, 2-2, 3-1, 3-2”中的数据集。我可以提供我的原始数据文件吗?
  • 是的,您展示了您的数据集的样子,但它们不可重现,因为我不能将其复制粘贴到 r 中。相反,为了让其他人更容易重现您的结果,请运行 dput(cidf) 并在此处复制粘贴输出。为您使用的每个数据集执行此操作。或者另一种方式是您可以将您的数据上传到某个网站(如 github)并分享到它们的链接(如果您被允许分享它们)

标签: r ggplot2 geom-ribbon


【解决方案1】:

我首先将每个数据集重命名为 cidf1、cidf2 和 cidf3,这样它们就不会混合。 newdf 也是如此。我添加了一个列type,它基本上包含它是什么类型的图表的信息。我不确定你是否知道 tidyvesre,所以我使用基本 R 使用 $ 运算符添加一列

#Set 1
cidf1 <- read.csv("cidf_min.csv")
cidf1$type ="P_min"
newdf1<-read.csv("newdf_min.csv")
newdf1$type ="P_min"
 
#Set 2
cidf2<-read.csv("cidf_max.csv")
cidf2$type ="P_max"
newdf2<-read.csv("newdf_max.csv")
newdf2$type ="P_max"

#Set 3
cidf3<-read.csv("cidf_mean.csv")
cidf3$type ="P_mean"
newdf3<-read.csv("newdf_mean.csv")
newdf3$type ="P_mean"
  

然后我将它们组合在一起:

cidf = rbind(cidf1,cidf2,cidf3)
newdf =rbind(newdf1,newdf2,newdf3)

并绘制它们,设置color=type 以根据数据集为每条线着色。我删除了您在 ggplot 中的其他内容,因为它们与您提出的问题无关。

ggplot(cidf, aes(x=X, y=value))+geom_line(aes(color=type)) +
  geom_ribbon(aes(ymin=lower, ymax=upper, fill=type), alpha=0.3) +
  xlab(~"Con (\u00D7"~C[max]*")")+ylab(~"score ("*mu*"C/"*mu*"F)")+theme_bw()

所以它非常接近您正在寻找的东西。如果我误解了你想要做什么,请告诉我,我会更新我的代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-06
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    相关资源
    最近更新 更多