2016-04-28 3 views
0

Ich habe mir schon this question angesehen, aber die gegebene Lösung ist für meinen Anwendungsfall nicht ausreichend.Ist es möglich, die Achsengrenzen abzufragen, bevor das Diagramm gezeichnet wird?

Ich möchte Null-Basis ein Diagramm, während die ursprüngliche (automatisch generierte) oberen ylim beibehalten, ohne zu zeichnen und dann das Diagramm neu zeichnen.

Hier ist, was ich versucht habe, was nicht funktioniert, weil par scheint nur die obere Grenze auf dem Grundstück zu liefern, nachdem das Grundstück bereits gezeichnet wurde.

#!/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() 

Hier sind einige Beispieldaten, um dies auszuführen.

117 
190 
189 
189 
189 
191 
192 
193 
194 
197 

Wie könnte ich Null-base mein Graph während der ursprünglichen oberen y Grenzen zu bewahren?

+2

Zu wissen, wo Striche werden durch darauf gelegt, kompliziert, dass andere Parameter 'Grundstück()' und nicht nur die Daten bestimmen, wohin sie gehen würden. Es ist wahrscheinlich am besten, etwas wie "ylim = c (0, max (pretty (data $ V1))") zu verwenden, um einen vernünftigen oberen Teilstrich zu erhalten. – MrFlick

Antwort

3

Wenn Sie den Standard verwenden yaxs = "r" Einstellung, dann können Sie die obere Grenze unter Verwendung der Informationen über berechnen, wie die y-Grenzen aus dem xaxs Abschnitt berechnet (yaxs verweist auf den xaxs Abschnitt) auf der par Hilfe Seite:

xaxs
der Stil des Intervallberechnungsachse für die x-Achse verwendet werden. Mögliche Werte sind r, i, e, s, d. Die Stile sind in der Regel gesteuert durch den Bereich der Daten oder Xlim, wenn gegeben.
Stil "r" (regulär) erweitert zunächst den Datenbereich um 4 Prozent an jedem Ende und findet dann eine Achse mit hübschen Beschriftungen, die in den erweiterten Bereich passt.

upper_lim <- diff(range(x)) * 0.04 + max(x) 
upper_lim 
#[1] 200.2 

Wir können sehen, dass dies der Wert der Obergrenze (unter Standardeinstellungen) durch Auftragen und dann über sie zu fragen:

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

Daten

x <- read.table(text = "117 
190 
189 
189 
189 
191 
192 
193 
194 
197") 
0

Ja . Möglich. Es gibt einen Parameter, der plot die gesamte Einrichtung vornehmen lässt, aber das Plotten unterdrückt. Ich denke es ist plot="n". Sie können dann alle Koordinaten mit Par ("usr") erhalten. (Gesendet von einem BART-Zug unter SFBay, also zu der Zeit keinen Zugang zu einer R-Konsole.)

Es war type = "n" dokumentiert in ?plot. Der Plotten Code wäre dann:

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

Ich schaute mich um und war nicht in der Lage, einen solchen Parameter irgendwo zu finden. Wenn Sie sich daran erinnern, aktualisieren Sie diese Antwort bitte. – merlin2011

Verwandte Themen