2017-10-20 2 views
0

sagen, dass ich einen Datenrahmen haben und wollen ein GrundstückWie die Größe eines Graphen in ggplot2 unabhängig von Achse spezifizieren Etiketten

df <- melt(iris) 

p <- ggplot(data = df, aes(x = Species, y = value)) + 
     geom_boxplot() + theme(aspect.ratio = 1) 

Ich möchte machen dann ggsave() verwenden, um ein PDF des sparen

Stück
ggsave(plot = p, width = 3, height = 3, dpi = 300, filename = "not squished axis.pdf") 

enter image description here

das Problem ist, dass ich die Dimensionen des Grundstücks selbst, sondern unabhängig von den Achsenbezeichnungen angeben will, so dass der Plot unten angegebenen w Sie haben die gleiche Größe und Abmessung in Bezug auf die absolute Länge der Achsen.

q <- ggplot(data = df, aes(x = Species, y = (value)*10000000)) + 
     geom_boxplot() + theme(aspect.ratio = 1) 

ggsave(plot = q, width = 3, height = 3, dpi = 300, filename = "squished axis.pdf") 

enter image description here

Gibt es eine Möglichkeit, dies leicht zu tun? Hier

ist ein Beispiel eines Diagramms näher zu dem, was ich in Bezug auf den Achsenlängen möchte:

enter image description here

Das einzige Problem besteht darin, dass durch das Bildseitenverhältnis zu ändern, I squishing am Ende des y Achse, um die x-Achse näher an die Länge zu machen ...

+0

verstehe ich die Frage nicht. "Unabhängig von Achsenbezeichnungen" was bedeutet? Wenn Sie 'height' und' width' in 'ggsave' angeben, hat das Plot * die gleichen Abmessungen (in Pixel/Inch) und (abhängig von den Daten) unterschiedliche Achsenbereiche. Können Sie eine Mock-up-/Beispielfigur von dem, was Sie erreichen möchten, hinzufügen? –

+0

Die absolute Länge der Achsen unterscheidet sich in den beiden obigen Diagrammen, da die Bruchmarken der y-Achse im zweiten Diagramm länger sind als im ersten Diagramm. Ich möchte in der Lage sein, verschiedene Längen-Etiketten zu haben, aber die gleiche x-Achse und y-Achse beizubehalten. Ich habe die Frage mit einer dritten Handlung aktualisiert, die näher an dem aussieht, was ich erreichen möchte. –

+0

@MauritsEvers Ich habe Probleme, eine repräsentative Handlung von dem zu machen, was ich will, aber im Wesentlichen möchte ich die Größe des Grafikbereichs (d. H., die Länge in Zoll der X- und Y-Achse) konsistent zwischen Plots, die längere Beschriftungen für die Y-Achse haben, da die Nummerierung länger ist –

Antwort

0

Ich verstehe nicht wirklich, was Sie wollen, also ist das ein bisschen ein Stich in die Dunkelheit.

Sie können zwei Diagramme zeigen die gleiche Skala facet_wrap mit:

# Your sample data 
df <- list(
    one = melt(iris), 
    two = with(melt(iris), cbind.data.frame(Species, variable, value * 1000))); 
df <- melt(df); 

ggplot(df, aes(x = Species, y = value)) + 
    geom_boxplot() + theme(aspect.ratio = 1) + 
    facet_wrap(~ L1); 

enter image description here

Oder lassen die y-Skala für jede Facette frei variieren.

ggplot(df, aes(x = Species, y = value)) + 
    geom_boxplot() + theme(aspect.ratio = 1) + 
    facet_wrap(~ L1, scales = "free_y"); 

enter image description here

einzustellen, können Sie die Raster-Layout der Facetten, indem die Anzahl der Spalten oder Zeilen spezifiziert nrow und ncol verwenden.

So zum Beispiel, für die vertikale Anordnung der beiden Plots können Sie

ggplot(df, aes(x = Species, y = value)) + 
    geom_boxplot() + theme(aspect.ratio = 1) + 
    facet_wrap(~ L1, ncol = 1, scales = "free_y"); 

enter image description here

+0

Danke, ja, Facetten-Wrap führt dazu, dass der Plotting-Bereich gerade ist, aber ich würde wirklich gerne die Plots separat machen. Beachten Sie bei Ihrem letzten Beispiel, wie der graue Plotbereich der beiden Plots die gleiche Länge hat, obwohl die Werte 8000, 6000, 4000 usw. weiter reichen als die Werte 8, 6, 4, usw. Wie auch immer Sehen Sie in meinen Beispielen, wenn ich diese PDFs speichere, wird die Länge der X-Achse gequetscht, um die Länge der Y-Achsenwerte aufzunehmen. –

+0

Die Angabe der Abmessungen "height" und "width" des Diagramms, das mit ggsave() gespeichert werden soll, verhindert, dass die Achsenbeschriftungen den Plotbereich zerquetschen. Ich möchte jedoch, dass alle Plots gespeichert werden mit den darstellenden Bereichen (Länge der X-Achse und Länge der Y-Achse) zu einer bestimmten Länge –

+0

Ich fürchte in diesem Fall ist Ihre beste Wette "facet_wrap". Um ehrlich zu sein, scheinen Ihre Plotanforderungen sehr merkwürdig zu sein; es scheint ein rein ästhetisches Problem zu sein. Eine, die mit 'facet_wrap' leicht angesprochen werden kann. Was Sie aus irgendeinem Grund nicht verwenden möchten. Sowieso. Viel Glück, ich habe keine weitere Hilfe, die ich anbieten kann. –

Verwandte Themen