使用ggplot绘制R风格的坐标轴

13

使用ggplot,能否得到“R风格”的x/y轴,这些轴不在原点相交,而是由两个不连续的范围组成,如下面的例子所示?

输入图像描述

主要原因是希望ggplot的绘图结果与纯R的结果看起来更加一致。


3
这引出了一个问题,为什么不让基础图表看起来像ggplot2呢? ;) - baptiste
因为我既不能更新也不能重做基础图。我曾经考虑过编辑由ggplot生成的SVG文件,但那样太过于hack了。 - Christian
如果您想将基础图形数字化,可以尝试使用digitize软件包。 - mnel
1个回答

15

试试这个,

library(ggplot2)

d <- data.frame(x=1:10, y=rnorm(10))

base_breaks_x <- function(x){
  b <- pretty(x)
  d <- data.frame(y=-Inf, yend=-Inf, x=min(b), xend=max(b))
  list(geom_segment(data=d, aes(x=x, y=y, xend=xend, yend=yend), inherit.aes=FALSE),
       scale_x_continuous(breaks=b))
}
base_breaks_y <- function(x){
  b <- pretty(x)
  d <- data.frame(x=-Inf, xend=-Inf, y=min(b), yend=max(b))
  list(geom_segment(data=d, aes(x=x, y=y, xend=xend, yend=yend), inherit.aes=FALSE),
       scale_y_continuous(breaks=b))
}

ggplot(d, aes(x,y)) +
  geom_point() +
  theme_bw() +
  theme(panel.border = element_blank(),
       panel.grid.major = element_blank(),
       panel.grid.minor = element_blank()) +
  base_breaks_x(d$x) +
  base_breaks_y(d$y)

screenshot

编辑:在ggtheme包中已经讨论了一个相关问题,并且可能提供了一个更清晰的解决方案(不需要将数据显式地提供给breaks函数)。


非常好!我想使用opts(axis.line = theme_line()),但是那里出现了非常奇怪的错误... - Joris Meys

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