2010-09-25 17 views
12

Ich suchte nach diesem und fand, dass es mit {grid} Möglichkeiten gibt, ein Bild zu drehen, und dass Sie für einige Diagramme mit ihrer Rotation spielen können (zB plot (x, y) statt plot (y, x)) .Ist es möglich, ein Diagramm in R (Basisgrafiken) zu drehen?

Ich möchte jedoch wissen, ob es eine generische Methode gibt, um ein Diagramm in R zu drehen (eine, die für jedes in Basisgrafiken generierte Diagramm funktionieren würde)?

+2

Sprechen Sie über "Drehen der Daten" (wie Ihr Beispiel implizieren würde) oder über "Drehen der Grafik" (dh grafisch um 35 Grad nach rechts drehen) – nico

+0

nico - B. Danke :) –

+0

So Nützliche Informationen hier https://stat.ethz.ch/pipermail/r-help/2003-May/033157.html –

Antwort

5

Ich bin ziemlich sicher, dass es keine Möglichkeit gibt, mit Basisgrafiken selbst dies generisch zu tun. Es gibt jedoch das gridBase Paket, das es ermöglicht, Basisgrafiken und Rastergrafiken in einem "Plot" zu mischen. Die Vignette für das Paket enthält einen Abschnitt zum Einbetten von Basisgrafiken in das Raster viewports, sodass Sie dort nachsehen können, ob Sie einen Gitterwrapper um Ihre Plots herum erstellen und das Gitter für die Drehung verwenden können. Nicht sicher, ob dies eine brauchbare Route ist, aber ist, soweit ich weiß, der einzige mögliche Weg zu einer Antwort auf Ihre Q.

ist auf CRAN und der Autor ist Paul Murrell, der Autor des Grid-Pakets .

Nach der Vignette surfen, stelle ich fest, eine der Kugeln in die Probleme und Beschränkungen auf Seite, die besagt, dass es nicht möglich ist, Basis Grafiken einbetten in ein grid Ansichtsfenster gedreht. Also ich denke du hast kein Glück.

+0

Gute Antwort! (obwohl nicht die, die ich gerne gelesen hätte) Danke! –

2

Da es möglich ist, Ihre eigenen Plotfunktionen mit Basisgrafiken zu schreiben, kann ich nicht sehen, wie eine einzelne Lösung existieren könnte. Willst du wirklich nur eine Möglichkeit, x Daten mit y Daten zu replazieren? Was genau meinst du mit "drehen"?

+0

rotieren = um das Ausgabeplot (zum Beispiel) um 90 Grad gedreht zu machen. –

+0

Meinst du die * ganze * Handlung? Achsen, Text, Tickmarks usw.? Das scheint auf einem Bildschirmgrafikgerät sinnlos zu sein, oder auf einem Postscript-Gerät können Sie wahrscheinlich horizontal = TRUE/FALSE verwenden, um eine gedrehte Zeichnung relativ zum Papier zu erzeugen. Oder verwenden Sie das Svg() Grafikgerät und laden Sie dann die SVG-Datei in Inkscape, wählen Sie alle und drehen Sie um 90 Grad. Dies sind alle gültigen Möglichkeiten, um das Ausgabeplot um 90 Grad gedreht zu machen. – Spacedman

+0

Das stimmt - aber ich frage mich, ob es eine Möglichkeit gibt, dies in R zu tun :) –

2

Eine Funktion rotate_plot wie

verwendet werden
rotate_plot(some_base_plot(x, y, ...)) 

ist nicht möglich, weil die meisten des Grundstücks keinen Wert zurück.

Einige der Plots enthalten ein horiz Argument, mit dem Sie auswählen können, in welcher Richtung die Plotzeichnung angezeigt werden soll. Werfen Sie einen Blick auf barplot.default, um zu sehen, wie dies zu implementieren ist. (Warnung: es ist chaotisch.)

@ ucfagls Vorschlag, gridBase zu verwenden, ist Ihre beste Wette. Es gibt einige Beispiele für seine Verwendung in Appendix B von Murrells R Graphics.

+0

Danke Richie - Ich bin traurig von der Antwort, aber es ist eine Antwort nicht weniger. Ich werde als "Antwort" ucfagls für Timing-Zwecke zu markieren. Beste, Tal –

4

Spinning 3D Scatterplots

Sie können auch eine interaktive 3D-Punktwolke mit dem Plot3D (x, y, z) -Funktion in dem rgl Paket erstellen. Es entsteht ein sich drehendes 3D-Streudiagramm, das mit der Maus gedreht werden kann. Die ersten drei Argumente sind die numerischen Vektoren x, y und z, die Punkte darstellen. col = und size = steuern die Farbe bzw. Größe der Punkte.

# Spinning 3d Scatterplot 
library(rgl) 

plot3d(wt, disp, mpg, col="red", size=3) 
7

Sie die Grafik exportieren könnte, es wieder in gelesen und angezeigt werden gedreht, um ihn als rasterGrob, sagen wir, (oder einer rasterImage nach der Matrix zu drehen, oder ein grImport grob, wenn Sie Vektorpfade wollen)

plot(1:10, rnorm(10)) 
library(grid) 
cap <- grid.cap() 
grid.newpage() 
grid.raster(cap, vp=viewport(angle=30)) 

Das neue gridGraphics Paket kann jetzt eine bessere Alternative sein.

Hinweis: Dies scheint nicht mit Rstudio Grafikgerät zu arbeiten, vermutlich haben sie grid.cap nicht implementiert.

enter image description here

+3

Ihr Code funktioniert nicht! 'Fehler in UseMethod (" as.raster "): keine anwendbare Methode für 'as.raster' angewendet auf ein Objekt der Klasse" NULL "' –

+1

Ich erhalte einen ähnlichen Fehler :( – user2543622

4

Es ist irgendwie möglich über das gridGraphics Paket, obwohl es ein wenig rau an den Rändern fühlt (die Beispiele in ?grid.echo haben nicht alle Arbeit für mich),

plot(1:10, rnorm(10)) 

library(gridGraphics) 

grab_grob <- function(){ 
    grid.echo() 
    grid.grab() 
} 

g <- grab_grob() 
grid.newpage() 
pushViewport(viewport(width=0.7,angle=30)) 
grid.draw(g) 

enter image description here

Verwandte Themen