2014-05-01 6 views
7

a zu zeichnen „crossed“ Rechteck mit der Höhe 2 mal größer ist als seine Breite, um die Low-Level-graphics Paket Einrichtungen verwendet Ich nenne:Preserving Seitenverhältnis in R des Rastergrafik

xlim <- c(0, 500) 
ylim <- c(0, 1000) 
plot.new() 
plot.window(xlim, ylim, asp=1) 
rect(xlim[1], ylim[1], xlim[2], ylim[2]) 
lines(c(xlim[1], xlim[2]), c(ylim[1], ylim[2])) 
lines(c(xlim[1], xlim[2]), c(ylim[2], ylim[1])) 

Die Figur hat eine schöne Eigenschaft: Das Seitenverhältnis bleibt erhalten, sodass ich, wenn ich die Größe des Diagrammfensters ändere, die gleichen Proportionen von Höhe zu Breite erhalte. Wie kann ich ein äquivalentes Ergebnis mit grid Grafiken erhalten?

Antwort

3

Sie sollten ein Ansichtsfenster erstellen, die Platz Normalized Elternteil Koordinaten verwendet, siehe ?unit:

"snpc": (...) Dies ist für die Dinge nützlich ist, die einen Anteil des Darstellungs sind, aber muss quadratisch sein (oder ein festes Seitenverhältnis haben). Hier

ist der Code:

library('grid') 
xlim <- c(0, 500) 
ylim <- c(0, 1000) 
grid.newpage() # like plot.new() 
pushViewport(viewport(# like plot.window() 
     x=0.5, y=0.5, # a centered viewport 
     width=unit(min(1,diff(xlim)/diff(ylim)), "snpc"), # aspect ratio preserved 
     height=unit(min(1,diff(ylim)/diff(xlim)), "snpc"), 
     xscale=xlim, # cf. xlim 
     yscale=ylim # cf. ylim 
)) 
# some drawings: 
grid.rect(xlim[1], ylim[1], xlim[2], ylim[2], just=c(0, 0), default.units="native") 
grid.lines(xlim, ylim, default.units="native") 
grid.lines(xlim, rev(ylim), default.units="native") 

default.units Das Argument in z.B. grid.rect zwingt die Zeichenfunktionen , die nativen (xscale/yscale) Ansichtsfensterkoordinaten zu verwenden. just=c(0, 0) zeigt an, dass xlim[1], ylim[1] den unteren linken Knoten des Rechtecks ​​bezeichnen.

1

In ggplot2 (die grid basiert) Sie können das Seitenverhältnis beheben coord_fixed() mit:

library(ggplot2) 
ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point() + coord_fixed(ratio = 0.5) 

Dies wird das Verhältnis zu beheben, und das Verhältnis wird auch konstant sein, wenn die Größe des Fensters Grafiken ändern.

Ich bin mir nicht sicher, ob dies hilfreich ist, da Sie nach einer Low-Level-Lösung grid gefragt haben. Aber ich dachte, es könnte trotzdem nützlich sein.