如何调整ggplot2中绘制轴的程度?

时间:2014-08-15 13:54:07

标签: r plot ggplot2

我对ggplot2比较陌生,多年来在R中使用了基本图形。我一直喜欢基本图形的一件事是轴上的额外填充,因此两个轴不会在原点接触。以下是基本图形中的一个简单示例:

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

这使得:

base graphics

其中,当我在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 个答案:

答案 0 :(得分:6)

使用函数expand=scale_x_continuous()的参数scale_y_continuous(),您可以获得以特定值开头和结尾的轴。但是如果你没有提供这些价值,那么它就会看起来像是削减了点数。

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())

enter image description here

答案 1 :(得分:1)

您可以通过影响缩放y轴的方式来调整此行为。 ggplot2通常根据数据选择限制并将轴扩展为litte。

以下示例将扩展设置为零,并使用自定义限制来更多地控制轴。但是,正如您所看到的,让轴终止于最大值并不总是有益的,因为点字符可能会被切断。所以建议多一点空间..

require(ggplot2)
x <- y <- 1:10
qplot(x, y) + theme_classic() +
  scale_y_continuous(limits=c(-0.5,10), expand=c(0,0))