2016-04-28 59 views
0

我已经看过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 

我怎么可能零基我的图形,同时保留原上ÿ限制?

+2

知道在哪里刻度线将放置由复杂的,因为其他参数'图()'而不仅仅是数据可以判断,他们会去。最好使用'ylim = c(0,max(pretty(data $ V1)))'来获得一个合理的顶部刻度标记。 – MrFlick

回答

3

如果您使用的是默认设置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") 
0

是。可能。有一个参数可让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() 
+0

我环顾四周,无法在任何地方找到这样的参数。如果您碰巧记得它,请更新此答案。 – merlin2011

相关问题