6

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

以下是轴当前的样子:

ggplot2 绘图

我更喜欢从基本图形中获得的东西(但我geom_ribbon还在 ggplot2 中使用了我真正喜欢的其他花哨的东西,所以我更愿意找到一个 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
4

1 回答 1

3

此问题的解决方法是删除轴线theme(axis.line=element_blank()),然后添加假轴线geom_segment()- 一个用于 x 轴,第二个用于 y 轴。x, y,xendyend值是根据您的绘图(作为每个对应轴的绘图上显示的最小值和最大值)和用于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)

在此处输入图像描述

于 2013-05-08T05:13:07.340 回答