die Diskussion über asp
in der Hilfe für plot.window
impliziert, dass asp
xlim
und ylim
Einstellungen außer Kraft setzen wird (wenn Sie für plot
auf die Hilfe suchen, ist es Ihnen plot.window
lenkt mehr über asp
, um herauszufinden,):
Wenn asp
ein endlicher positiver Wert ist, dann wird das Fenster so eingerichtet ist, dass eine Dateneinheit in der x-Richtung in der Länge asp
* ein Datum Einheit in der y-Richtung gleich ist.
Beachten Sie, dass in diesem Fall wird par("usr")
nicht mehr durch, zum Beispiel par("xaxs")
, sondern vielmehr durch asp
und das Seitenverhältnis des Geräts. (Siehe , was passiert, wenn Sie interaktiv die Plotvorrichtung der Größe nach das Beispiel unten läuft!)
Der Sonderfall asp == 1
erzeugen Flächen, auf denen Abstände zwischen Punkten sind genau auf dem Bildschirm dargestellt. Werte mit asp > 1
können verwendet werden, um genauere Karten zu erzeugen, wenn Breitengrad und Längengrad verwendet werden.
Wie @ mr.joshuagordon erwähnt, können Sie die pdf
(oder png
oder jpeg
wenn Sie Bitmap ausgegeben werden soll) Funktion und mit den Abmessungen spielen das Seitenverhältnis erhalten Sie wollen, während das Entfernen des asp
Argument von plot
Damit können Sie die Werte xlim
und ylim
einstellen.
Eine weitere Möglichkeit ist ggplot2
zu wechseln, das macht es einfach separat Achsgrenzen und Seitenverhältnis einzustellen:
library(ggplot2)
# Some fake data
dat = data.frame(x=c(2,30,50), y=c(10, 60, 90))
# 1 y-unit = 1 x-unit, so the plot area is not square
ggplot(dat, aes(x,y)) +
geom_point() +
scale_x_continuous(limits=c(0,70)) +
scale_y_continuous(limits=c(0,100)) +
coord_fixed(ratio=1)
# 1 y-unit = 0.7 * 1 x-unit, so the plot is square, but the physical distance
# of each x-unit and y-unit are no longer the same
ggplot(dat, aes(x,y)) +
geom_point() +
scale_x_continuous(limits=c(0,70)) +
scale_y_continuous(limits=c(0,100)) +
coord_fixed(ratio=70/100)
UPDATE: Hier ist, wie xlim
zu steuern, ylim
und das Seitenverhältnis unabhängig in der Basis graphics: Verwenden Sie anstelle von asp
den grafischen Parameter pin
, um die physischen Abmessungen der Zeichnungsregion festzulegen. Diese Einstellung hat keinen Einfluss auf die Nennwerte von xlim
und ylim
, ändert jedoch den physikalischen Abstand von 1 x-Einheit und 1 y-Einheit. Hier sind einige Beispiele:
Beispiel 1: Wir zwei Platten auf einer PDF-Seite erstellen werden, die jeweils mit einem anderen Seitenverhältnis:
# Create a 12" x 6" pdf graphics device
pdf("test.pdf", width=12, height=6)
# Divide graphics device into two regions, each of which will contain a plot
par(mfrow=c(1,2))
# Left Panel: 5" x 5" plot area (plot region is square, so 1 y-unit =
# 0.7 * 1 x-unit in terms of physical distance in the plot region)
par(pin=c(5,5))
plot(0, 0, xlim = c(0, 70), ylim = c(0, 100), xlab = "", ylab = "",
type = "n",main='par(pin=c(5,5)')
# Right Panel: 0.7*5" x 5" plot area (so 1 x-unit = 1 y-unit
# in terms of physical distance in the plot region)
par(pin=c(0.7*5,5))
plot(0, 0, xlim = c(0, 70), ylim = c(0, 100), xlab = "", ylab = "",
type = "n",main='par(pin=c(5,0.7*5)')
dev.off()
Beispiel 2: Zeigen, dass Sie einen Fehler erhalten, wenn Sie Stellen Sie größer als die Größe des Grafikgeräts ein. Wir verwenden das Standardgerät (RStudioGD
in meinem Fall).
par(pin=c(10, 10))
plot(0, 0, xlim = c(0, 70), ylim = c(0, 100), xlab = "", ylab = "",
type = "n",main='par(pin=c(5,4)')
# Get dimensions of the default plot device
par("din")
# Create a plot that takes up an area just a bit smaller than the device size
par(pin=par("din")-0.2)
plot(0, 0, xlim = c(0, 70), ylim = c(0, 100), xlab = "", ylab = "",
type = "n",main='par(pin=c(5,4)')
# Create a plot that takes up an area just a bit larger than the device size
# (we'll get an error this time)
par(pin=par("din") + 0.01)
plot(0, 0, xlim = c(0, 70), ylim = c(0, 100), xlab = "", ylab = "",
type = "n")
> Error in plot.new() : plot region too large
Beispiel 3: Der gleiche Fehler tritt auf, wenn Sie die Größe Ihres pdf
(oder png
, etc.) Gerät überschreiten:
# Create a 5" x 5" pdf graphics device
pdf("test.pdf", 5,5)
# Create a plot that takes up a little bit less than the device size
par(pin=c(5,5)-0.2)
plot(0, 0, xlim = c(0, 70), ylim = c(0, 100), xlab = "", ylab = "",
type = "n")
dev.off()
# Create a plot that takes up a little bit more than the device size
pdf("test.pdf", 5,5)
par(pin=c(5,5)+0.01)
plot(0, 0, xlim = c(0, 70), ylim = c(0, 100), xlab = "", ylab = "",
type = "n")
# Gives the following error: Error in plot.new() : plot region too large
dev.off()
Danke für das Hinzufügen zu @ mr.joshuagordon's Antwort. Dies erklärt, warum es nicht funktioniert hat, obwohl ich immer noch rätselhaft finde, warum xlim und ylim von asp übersteuert werden müssten. In meinem Fall brauche ich asp (da 1 x-step genau 1 y-step entspricht, da sie Meter in den Daten darstellen), aber ich möchte auch in der Lage sein, den Plot auf den Datenbereich zu beschränken, den ich gerade bearbeite mit. Danke für die ggplot2-Lösung, es scheint, als müsste ich endlich anfangen, ggplot2 zu lernen ... –
Ich empfehle sehr, 'ggplot2' zu lernen. Ich habe es auch eine Zeit lang vermieden, weil es eine Menge Arbeit war, eine neue Art zu denken über Grafik zu lernen. Aber es hat nicht lange gedauert und ich benutze nur selten Basisgrafiken. – eipi10
Danke @ eipi10, du warst extrem hilfreich Die Updates deiner Antwort sind SEHR nützlich und du stimulierst mich auf jeden Fall zum Abholen von ggplot2. Ein Grund, warum ich es bisher abgelehnt habe, ist, dass es viel langsamer erscheint, Grafiken als Basisgrafiken zu rendern. –