如何在ggplot2中调整轴线绘制的范围?

6

我对ggplot2比较陌生,多年来一直在使用R语言的基础图形。其中一个我一直喜欢基础图形的地方是坐标轴上的额外填充,这样两个轴不会在原点处相接。下面是一个基础图形的简单示例:

png(file="base.png")
plot(x,y, bty="n")
dev.off()

这使得:

基本图形

然而,当我在ggplot2中做类似的事情时

require(ggplot2)
x <- y <- 1:10
png(file="qplot.png")
qplot(x, y) + theme_classic()
dev.off()

我了解:

qplot graphics

我该如何调整轴线的绘制程度?例如,对于y轴,我希望它在10.0处停止,而不是继续到约10.5?

更新:感谢评论。现在我已经得到我想要的结果了;这里有一个代码片段,可以将轴线仅绘制到每个轴上的最小/最大刻度。

o = qplot(x, y) + theme_classic() +
  theme(axis.line=element_blank())
oo = ggplot_build(o)
xrange = range(oo$panel$ranges[[1]]$x.major_source)
yrange = range(oo$panel$ranges[[1]]$y.major_source)
o = o + geom_segment(aes(x=xrange[1], xend=xrange[2], y=-Inf, yend=-Inf)) +
  geom_segment(aes(y=yrange[1], yend=yrange[2], x=-Inf, xend=-Inf))
plot(o)

better axes

2个回答

14

使用函数scale_x_continuous()scale_y_continuous()的参数expand=,您可以获得起始和结束于特定值的轴。但是如果你不提供这些值,那么它看起来就像点被切断了。

qplot(x, y) + theme_classic()+
      scale_x_continuous(expand=c(0,0))

enter image description here

为了让图像看起来像基础图一样,一个解决方法是使用 theme() 去除轴线,然后使用 geom_segment() 在值为2到10(例如)之间添加线条代替轴线。

qplot(x, y) + theme_classic()+
      scale_x_continuous(breaks=seq(2,10,2))+
      scale_y_continuous(breaks=seq(2,10,2))+
      geom_segment(aes(x=2,xend=10,y=-Inf,yend=-Inf))+
      geom_segment(aes(y=2,yend=10,x=-Inf,xend=-Inf))+
      theme(axis.line=element_blank())

在此输入图片描述


1
你可以通过影响y轴的刻度方式来调整此行为。通常,ggplot2 根据数据选择限制并稍微扩展轴线。以下示例将扩展设置为零,并使用自定义限制以更好地控制轴线。但是,正如您所看到的,仅在最大值处结束轴线并不总是有益的,因为点字符可能会被截断。因此建议留出一些额外的空间。
require(ggplot2)
x <- y <- 1:10
qplot(x, y) + theme_classic() +
  scale_y_continuous(limits=c(-0.5,10), expand=c(0,0))

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