在绘制图之前是否可以查询轴限制?
我已经看过this question,但给出的解决方案对于我的用例来说是不够的。在绘制图之前是否可以查询轴限制?
我想零基础的一个图,同时保留原始(自动生成)上ylim
,没有绘制,然后重绘图。
以下是我尝试过的方法,这是行不通的,因为par
似乎只在绘图绘图后提供了图上的上限。
#!/usr/bin/Rscript
args <- commandArgs(trailingOnly = TRUE)
data <- read.csv(args[1],head=F)
pdf(paste(args[1], ".pdf", sep=''))
plot(seq(1,dim(data)[1]), data$V1, ylim=c(0,par('usr')[4]))
dev.off()
这里是一些示例数据运行此。
117
190
189
189
189
191
192
193
194
197
我怎么可能零基我的图形,同时保留原上ÿ限制?
如果您使用的是默认设置yaxs = "r"
,那么你可以使用计算绕y限制如何从xaxs
部分计算的信息(yaxs
是指你的xaxs
部分)的par
帮助上限页面:
xaxs
用于x轴的轴间距计算的样式。 可能的值是“r”,“i”,“e”,“s”,“d”。样式通常是 由数据范围或xlim控制(如果给出)。
样式“r”(常规) 首先将数据范围扩展4%,然后找到 具有适合扩展范围的漂亮标签的轴。
upper_lim <- diff(range(x)) * 0.04 + max(x)
upper_lim
#[1] 200.2
我们可以看到,这是上限值(默认设置下),通过绘制,然后问它:
plot(seq_along(x$V1), x$V1)
par("usr", no.readonly = TRUE)[4]
# [1] 200.2
plot(seq_along(x$V1), x$V1, ylim = c(0, upper_lim))
数据
x <- read.table(text = "117
190
189
189
189
191
192
193
194
197")
是。可能。有一个参数可让plot
完成所有设置,但禁止绘图。我认为这是plot="n"
。然后,您可以使用par(“usr”)获取所有坐标。 (从SFBay下的BART列车发送,因此当时不能访问R控制台。)
它是type = "n"
记录在?plot
中。然后绘制代码如下:
Y <- scan(text="117
190
189
189
189
191
192
193
194
197");plot(seq(1,length(Y)), Y, type="n") # plots to the interactive device
opar=par()
pdf("Y.pdf"); # needed to get the 'usr' value before resetting `par` with new device
plot(seq(1,10),Y, ylim=c(0,opar$usr[4]))
dev.off()
我环顾四周,无法在任何地方找到这样的参数。如果您碰巧记得它,请更新此答案。 – merlin2011
知道在哪里刻度线将放置由复杂的,因为其他参数'图()'而不仅仅是数据可以判断,他们会去。最好使用'ylim = c(0,max(pretty(data $ V1)))'来获得一个合理的顶部刻度标记。 – MrFlick