我对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()
我明白了:
如何调整绘制轴的范围?例如对于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)
答案 0 :(得分:6)
使用函数expand=
和scale_x_continuous()
的参数scale_y_continuous()
,您可以获得以特定值开头和结尾的轴。但是如果你没有提供这些价值,那么它就会看起来像是削减了点数。
qplot(x, y) + theme_classic()+
scale_x_continuous(expand=c(0,0))
要获得基本图的外观,一种解决方法是使用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 :(得分: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))