使用ggplot,能否得到“R风格”的x/y轴,这些轴不在原点相交,而是由两个不连续的范围组成,如下面的例子所示?
主要原因是希望ggplot的绘图结果与纯R的结果看起来更加一致。
试试这个,
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)
编辑:在ggtheme包中已经讨论了一个相关问题,并且可能提供了一个更清晰的解决方案(不需要将数据显式地提供给breaks函数)。
digitize
软件包。 - mnel