2016-04-28 74 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

相關問題