如何使用ggplot2在单条线中添加多个线样式?

5

我正在尝试使用自己的数据集重新创建附图。所附的R脚本已经完成了90%的工作,但我似乎找不到一种方法来使线条的样式符合图中的要求。具体而言,我需要线条特征从实线开始,以点结束,然后继续为虚线。 我喜欢在R中使用ggplot2。

如何使我的图中每条线都是实线,直到x = 5 ,然后以点结束,最后继续成为虚线?

enter image description here

# Sample Dataset
Samples = c(1,2,3,4,5,6,7,8,9,10)
SestYB = c(2.1,3.89,5.42,6.73,7.87,8.86,9.75,10.56,11.3,12)
CILowYB = c(1.03,2.01,2.92,3.76,4.52,5.21,5.82,6.37,6.86,7.3)
CIUpYB = c(3.17,5.77,7.91,9.7,11.21,12.51,13.68,14.74,15.74,16.7)
SestEH = c(1.3,2.29,3.06,3.68,4.19,4.63,5.03,5.38,5.7,6)
CILowEH = c(0.34,0.73,1.13,1.5,1.84,2.13,2.39,2.61,2.79,2.95)
CIUpEH = c(2.26,3.85,4.98,5.85,6.54,7.14,7.66,8.15,8.61,9.05)
data.frame(Samples,SestYB,CILowYB,CIUpYB,SestEH,CILowEH,CIUpEH)

require(ggplot2)

mydata = data.frame(Samples,SestYB,CILowYB,CIUpYB,SestEH,CILowEH,CIUpEH)

# Variables
EH = mydata$SestEH
YB = mydata$SestYB

yb_lower = mydata$CILowYB
yb_upper = mydata$CIUpYB

eh_lower = mydata$CILowEH
eh_upper = mydata$CIUpEH

# Plot data
ggplot(mydata, aes(Samples)) + 
  xlab("Samples") +
  ylab("Species") +
  geom_line(aes(y=YB), 
            colour="blue", size = 1.25) + 
  geom_line(aes(y=EH), 
            colour="red", size = 1.25) +
  geom_ribbon(aes(ymin=yb_lower, ymax=yb_upper), 
              fill = "blue", 
              alpha=0.2) +
  geom_ribbon(aes(ymin=eh_lower, ymax=eh_upper), 
              fill = "red", 
              alpha=0.2) +
  theme(panel.background = element_blank()) +
  theme(panel.grid = element_blank()) +
  theme(axis.line = element_line(size = 1, colour = "dark gray", linetype = "solid"))
1个回答

8

这里有一个非常冗长的解决方案。我使用数据框中变量的名称mydata

思路是分别绘制线段,直到值为5,然后在值为5之后绘制线段。因此使用 subset() 函数。对于两个线段,都包括了值为5,以确保连续。要添加点,请使用geom_point()函数,并只对值为5的数据进行子集化。

ggplot() + 
  geom_line(data=subset(mydata,Samples<=5),aes(Samples,y=SestYB), 
            colour="blue", size = 1.25,linetype="solid") + 
  geom_line(data=subset(mydata,Samples>=5),aes(Samples,y=SestYB), 
            colour="blue", size = 1.25,linetype="dashed") +
  geom_line(data=subset(mydata,Samples<=5),aes(Samples,y=SestEH), 
          colour="red", size = 1.25,linetype="solid") + 
  geom_line(data=subset(mydata,Samples>=5),aes(Samples,y=SestEH), 
            colour="red", size = 1.25,linetype="dashed")+ 
  geom_ribbon(data=mydata,aes(Samples,ymin=CILowYB, ymax=CIUpYB), 
              fill = "blue", 
              alpha=0.2) +
  geom_ribbon(data=mydata,aes(Samples,ymin=CILowEH, ymax=CIUpEH), 
              fill = "red", 
              alpha=0.2)+
  geom_point(data=subset(mydata,Samples==5),aes(Samples,SestYB),size=5)+
  geom_point(data=subset(mydata,Samples==5),aes(Samples,SestEH),size=5)

enter image description here


很棒的答案!此外,现在你可以编写 ggplot(mydata) + geom_line(data=~subset(.x, Samples<=5)) 以便轻松更改数据源。 - Dan Chaltiel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接