繁体   English   中英

如何防止轴在ggplot2中相交

[英]how to prevent axes from intersecting in ggplot2

我正在使用ggplot2来制作一些日志变换数据的线图,这些数据都具有较大的值(在10 ^ 6和10 ^ 8之间); 由于轴不是从零开始,我宁愿不让它们在“原点”相交。

这是轴当前的样子:

ggplot2情节

我更喜欢一些更像是从基础图形获得的东西(但我还在geom_ribbon使用geom_ribbon和其他我喜欢的花哨的东西,所以我更喜欢找到一个ggplot2解决方案):

非相交轴

这是我目前正在做的事情:

mydata <- data.frame(Day = rep(1:8, 3), 
  Treatment = rep(c("A", "B", "C"), each=8), 
  Value = c(7.415929, 7.200486, 7.040555, 7.096490, 7.056413, 7.143981, 7.429724, 7.332760, 7.643673, 7.303994, 7.343151, 6.923636, 6.923478, 7.249170, 7.513370, 7.438630, 7.209895, 7.000063, 7.160154, 6.677734, 7.026307, 6.830495, 6.863329, 7.319219))

ggplot(mydata, aes(x=Day, y=Value, group=Treatment)) 
  + theme_classic() 
  + geom_line(aes(color = Treatment), size=1) 
  + scale_y_continuous(labels = math_format(10^.x)) 
  + coord_cartesian(ylim = c(6.4, 7.75), xlim=c(0.5, 8))

plot(mydata$Day, mydata$Value, frame.plot = F)  #non-intersecting axes

此问题的解决方法是删除带有theme(axis.line=element_blank())轴线theme(axis.line=element_blank()) ,然后使用geom_segment()添加假轴线 - 一个用于x轴,第二个用于y轴。 xyxendyend值由您的绘图确定(作为每个相应轴的绘图中显示的最小值和最大值)和coord_cartesian()使用的轴限制(限制的最小值以确保绘制段轴的位置)。

ggplot(mydata, aes(x=Day, y=Value, group=Treatment)) +theme_classic() +
 geom_line(aes(color = Treatment), size=1) +
 scale_y_continuous(labels = math_format(10^.x))+ 
 coord_cartesian(ylim = c(6.4, 7.75), xlim=c(0.5, 8))+
 theme(axis.line=element_blank())+
 geom_segment(x=2,xend=8,y=6.4,yend=6.4)+
 geom_segment(x=0.5,xend=0.5,y=6.5,yend=7.75)

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM