Holen Sie sich die Breite der Zeichnungsfläche in ggplot2
Gibt es eine Möglichkeit, um die Breite der Zeichnungsfläche in der grid-Fenster? Es wächst oder schrumpft, zum Beispiel, wenn plot.margin
geändert wird oder wenn die y-Achse Label' font-size erhöht. Ist die irgendwo versteckt in str(p)
?
Jeder Größe Messen funktionieren würde. Ich muss in der Lage sein zu Messen, die relative änderung in der Breite der Zeichnungsfläche in verschiedenen Szenarien wie das ändern der y-Achse Label' font-size.
df = data.frame(x = (1:3),One=c(12, 8, 13),Two=c(13, 7, 11),Three=c(11, 9, 11))
df.melt = melt(df, id.vars="x")
p = ggplot(df.melt, aes(x=x, y=value, color=variable)) +
geom_line() +
coord_cartesian(xlim=c(min(df.melt$x),max(df.melt$x))) +
theme(legend.position="none", plot.margin = unit(c(1, 4, 1, 1), "cm"))
p
UPDATE – Zu klären: Bitte helfen Sie mir berechnen a/b
.
p = ggplot(df.melt, aes(x=x, y=value, color=variable)) +
geom_line() + coord_cartesian(xlim=c(min(df.melt$x),max(df.melt$x))) +
theme(legend.position="none")
p1 = p + theme(plot.margin=unit(c(1,1,1,1),"cm"), axis.text.y=element_text(size=10))
p2 = p + theme(plot.margin=unit(c(1,1,1,2),"cm"), axis.text.y=element_text(size=30))
grid.arrange(p1, p2, ncol=2)
- Sie können es von der gtable
- Ich bin ein wenig unscharf, was Sie brauchen diese info für die, die einen gewissen Einfluss haben auf die Antwort, die ich denke. Aber für den Anfang, Blick in die Ausgabe von
ggplot_build(p)
. Ist das hilfreich? - das Ziel ist, um Platz
geom_text
Anmerkungen in einem festen Abstand von der linken und rechten Ende des plot-Bereichs auf einem festgelegten y-Wert. Meine überlegungen: Mit der absoluten Breite der Zeichnungsfläche bekannt, es ist leicht zu berechnen Sie die Entfernung zwischen zwei beliebigen Punkten auf der x-Achse und somit leicht zu positionierengeom_text
bei einem x-Wert, der in einem festen Abstand von der y-Achse ggplot_build(p)
ist interessant, aber ich habe nicht gefunden es nützlich noch als die Werte scheinen noch angegeben werden, relativ zu den plot-Bereich. Sieht wieder später- Nun, der Grund, ich wollte eine Klarstellung ist, dass es immer mindestens zwei coord-Systeme Sie arbeiten könnte, dass Ihre Daten und die des Gerätes selbst ein. Wenn Ihr Ziel ist es, etwas in den plot-Bereich, sollten Sie nur Informationen brauchen, auf der coord-system mit Ihren Daten, die
ggplot_build
geben Sie. Wenn Sie brauchen, Positionierung unabhängig von Ihrem Grundstück, dann müssen Sie Tauchen Sie ein in die grobs selbst. - Ich bin mit einigen Schwierigkeiten eintauchen in grobs und Messung Konvertierungen (siehe mein Kommentar zu agstudy Antwort). Jede Hilfe würde geschätzt werden.
- Ich kann nicht mehr helfen, vor allem, weil ich deutlich nicht das bekommen, was Sie zu tun versuchen, da ich immer noch nicht verstehe, warum können Sie nicht einfach das coord-system mit Ihren Daten.
- Nur der coord-system schwierig werden würde, denke ich, als alles in meinem Diagramm ändern kann (x-Achsen-Bereich, Anzahl der Beobachtungen, y-Werte etc.) und die Anmerkungen sollten immer in einem festen Abstand (z.B. 0,3 cm) von der linken und rechten Seite der Zeichnungsfläche. Ich aktualisiert die Frage. Wenn niemand antwortet hier, ich könnte die post eine neue Frage, die sich mehr auf die Anmerkungen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese fasziniert mich genug, um zu sehen, in es tiefer. Ich hatte gehofft, dass die
grid.ls
Funktion geben würde, die Informationen zu navigieren, um die richtigen Teile zu Holen Sie sich die Informationen, aber für dein Beispiel gibt es eine Reihe von Schritten, die ersetzt zu bekommen, die mit '...' und ich konnte nicht sehen, wie um das zu ändern, etwas zu geben, das leicht gearbeitet. Allerdings mitgrid.ls
oder anderen Werkzeugen können Sie die Namen der verschiedenen viewports. Die Ansichten, die von Interesse sind sowohl mit dem Namen 'panel.3-4-3-4' für dein Beispiel, unten ist etwas code, der die Navigation auf der 1., finden Sie die Breite in Zoll, navigieren Sie zu dem zweiten und finden Sie die Breite, dass man in Zoll.Konnte ich nicht herausfinden, einen einfachen Weg, um auf die zweite Platte ohne poping die erste. Das funktioniert und gibt die Informationen, die Sie brauchen, leider, da es öffnet das 1. Element aus der Liste kann man nicht gehen, um es zurück und finden Sie zusätzliche Informationen zu ändern oder zu modifizieren. Aber dies geben die Informationen, die Sie gebeten, die verwendet werden könnte in zukünftigen plots.
Vielleicht jemand anderes weiß, wie man navigieren Sie zu dem zweiten panel ohne knallen die erste oder immer die volle vpPath jedes einzelnen von Ihnen direkt navigieren.
grid.arrange
; z.B.p
), ohne es zuerst?gridPLT
Funktion aus der gridBase-Paket ist eine weitere Möglichkeit, um die info). Es ist wahrscheinlich ein Weg, mitgridDebug
oderggplot_build
, aber Sie sind entzieht sich meiner Kenntnis.Den plot in ggplot2 verwendet, raster-Grafik. Eine grafische Szene, dass produziert wurde
mit dem raster-Grafik-Paket besteht aus grobs und viewports.
Können Sie gridDebug - Paket für die Inspektion von grobs.
showGrob zeigen die Standorte und Namen der grobs zum zeichnen der Szene
Holen Sie sich die gpath der grob
Abrufen der gorb
h zu bekommen Eigenschaften (e.g)
Anwendung:
h$layoutvp$width
umgewandelt werden mitconvertX
? Ich kann nicht scheinen zu finden, die richtige Immobilie;h$layoutvp$width
ändert sich nicht auf eine änderung der y-Achsen-labels' font-size.showGrob()
einen Fehler zurückno applicable method for 'absolute.units' applied to an object of class "unit"
Diese Antwort ist vor allem in Antworten auf Kommentare von @java_xof. Die Antwort ist zu lang und enthält code, so passt es nicht in einen Kommentar. Sie kann aber helfen, mit der ursprünglichen Frage, wie gut (oder zumindest eine Basis).
Hier ist eine Funktion und einige code mit (es erfordert tcltk und tkrplot Pakete):
Definition der oben genannten Funktion, dann läuft die folgende Zeilen erzeugen 3 Parzellen der gleichen zufälligen Daten. Sie können sehen, dass die Ergebnisse der
par()$pin
undpar()$plt
(und anderer Parameter) sind genau die gleichen für die 3 Grundstücke, obwohl der Plot-Regionen unterscheiden sich in den Parzellen.Wird es auch 3 neue Fenster aufgetaucht, in der windows Sie können bewegen Sie den Mauszeiger über das Diagramm und im unteren Teil des Fensters sehen Sie die aktuelle Position des Zeigers in normalisierten device-Koordinaten und in Zoll (beide aus der unteren linken Ecke des Geräts region). Sie können bewegen Sie den Mauszeiger über die Ecken des Graphen (oder andere Teile) zu sehen, die Werte und vergleichen zwischen den 3 Grafiken.
Mag das genug sein, Sie zu beantworten, zumindest einen Teil der ursprünglichen Frage (nicht nur programmatisch, das wäre nützlicher). Die functon geändert werden kann, drucken Sie andere Messungen als gut. Ich kann erweitern Sie dieses und fügen Sie es in ein Paket in der Zukunft, wenn andere interessieren würde.
qplot
ist eine Funktion in dem Paket ggplot2, die ist definitiv verfügbar für R 2.15.2. Sie könnten versuchen, installieren Sie das Paket, da es ist, was die OP ist gefragt.qplot
Funktion ist aus dem ggplot2-Paket, das ich dachte, war implizit geladen werden, von der ursprünglichen Frage. Ich habe bearbeitet den code explizit laden Sie es jetzt. Könnte man auch ersetzen Sie die Aufrufe vonqplot
mit dem code aus der ursprünglichen Frage, und Sie würden das gleiche sehen. Selbst wenn man nur eine Basis-Handlung und die originalggplot
im Grafik-Geräte side-by-side können Sie sehen, dass die Handlung Regionen sind nicht die gleichen, aberpar()
meldet die gleichen Dinge seit dem grid-Grafik-Funktionen aktualisieren sich nicht, die Informationen, die par-abhängig ist.par()$pin
.par()$pin
Ergebnisse sind nicht exakt, können Sie immer noch halten Sie ein Lineal auf den Bildschirm, um zu sehen, dass die Zeichnungsfläche ist der Unterschied zwischen einer Basis-plot der Originaldaten und die verschiedenen Beispiel-plots in der bearbeiteten version von der Frage, währendpar()$pin
gibt die gleichen Werte für jedes Grundstück und nicht wieder auf die richtige Größe (evtl. skaliert) für raster-Grafiken.