2016-04-07 6 views
1

Ziemlich spezifische Frage hier, aber es kann anderen helfen, die ähnliche Probleme haben.Welche Parameter sollte ich in ggplot einstellen, wenn meine Achsentitel abgeschnitten werden?

Ich habe einige einfache Daten:

Y = c(0.02, 0.03, 0.03, 0.04, 0.05, 0.06, 0.08, 0.09, 0.10, 0.13, 0.17, 0.17, 0.21, 0.22, 
0.35, 0.47, 0.51, 0.53, 0.54, 0.65, 0.78) 
X = c(0.45, 0.26, 0.35, 0.22, 0.37, 0.09, 0.27, 0.51, 0.39, 0.37, 0.37, 0.27, 0.51, 0.36, 
0.44, 0.49, 0.63, 0.49, 0.71, 0.56, 0.67) 
self1 = data.frame(X, Y) 

ich auch eine einfache benutzerdefinierte ggplot Thema haben:

plot.theme = theme(axis.text = element_text(size=26), axis.title=element_text(size=28), 
plot.title=element_text(size=36, margin=margin(0,0,20,0)), panel.grid.minor 
= element_blank(), plot.margin=unit(c(0.1,0.25,0.5,0.85), "cm"), axis.title.y = 
element_text(margin=margin(0,15,0,0)), panel.border = element_rect(color="black", fill=NA, 
size=2), axis.ticks = element_blank(), legend.title = element_text(size=26), legend.text = 
element_text(size=18)) 

Wenn ich ein Streudiagramm der Daten mit marginalen Histogramme Grundstück:

bing = ggplot(self1, aes(x=X, y=Y)) + geom_point(size=3) + 
     geom_smooth(method = "lm", se=F, color="black") + 
     plot.theme + 
     ylab("Observed selfing rate") + 
     xlab("Observed crossing rate") + 
     geom_vline(xintercept = 0.42, linetype="longdash") + 
     geom_hline(yintercept = 0.25, linetype="longdash") 

ggExtra::ggMarginal(bing, type = "histogram", bins=6, size=10) 

Alles sieht gut aus, außer dass das "g" in "Beobachtete Kreuzungsrate" unten abgeschnitten wird des Graphen. Ich habe versucht, mit jedem Theme-Parameter, den ich mir vorstellen kann, herumzuzappeln, und ich habe auch versucht, einige der Argumente auf ggMarginal zu justieren, aber ich muss noch diejenige finden, die ich ändern muss, um alles innerhalb des Diagrammbereichs zu behalten. Kann mir jemand helfen? Ich vermute, dass das Problem letztendlich darin liegt, wie ggMarginal die Größen verschiedener Themenparameter automatisch anpasst, aber das ist nur eine Ahnung.

+0

Ihre Daten geschrieben Zeichnung sind in eine sehr schwer zu bedienende Form. Bitte geben Sie das Datenmuster erneut ein, indem Sie die Ausgabe von 'dput (self1)' in Ihre Frage einfügen. – eipi10

+0

Ich weiß, es ist nicht klar aus den SO-FAQ, aber die SO-Admins berechnen keine zusätzlichen Gebühren für die Rücksendung und Ihre ursprüngliche Buchung von 'X' &' Y' war nicht gültig R-Syntax. Wenn Sie wirklich wollen, dass Leute Ihnen helfen, sollten Sie es ihnen wahrscheinlich leichter machen. – hrbrmstr

+0

Hallo @ eipi10, ich bin nicht klar, wie dput() funktioniert. Ich habe eine Codezeile hinzugefügt, die das Objekt "self1" jetzt zumindest korrekt machen sollte. @hrbmstr, ich fürchte, ich weiß nicht, was ein Wagenrücklauf ist, aber ich werde versuchen, den Post zu bearbeiten, um es zu beheben. Das heißt, wenn ich meinen Code von oben in R kopiere und einfüge, läuft es für mich gut. – Bajcz

Antwort

2

wenn g Ihre Handlung ist, können Sie g$vp = grid::viewport(height=0.9, width=0.9) tun, bevor es (Print oder grid.draw)

+0

Sehr schöne, einfache Lösung. Das ist eine sehr nützliche Sache, zu wissen, danke! – Bajcz

1

Ich habe keine Möglichkeit gefunden, die Plot-Ränder des Objekts, das von ggMarginal zurückgegeben wird, zu ändern. Also, bis jemand mit einer besseren Lösung kommt, können Sie den Code in der ggMarginal Funktion selbst ändern. Hier ist wie:

  1. Geben Sie ggMarginal in der Konsole. Dies wird den Code ggMarginal drucken. Fügen Sie diesen Code in ein Skriptfenster ein. Geben Sie dieser Funktion einen neuen Namen, z. B. my_ggMarginal = [all the ggMarginal code you just pasted in].

  2. Suchen Sie die folgende Zeile in dieser Funktion:

    p <- p + ggplot2::theme(plot.margin = grid::unit(c(0, 0, 
                  0, 0), "null")) 
    

    und das es ändern:

    für die neue Funktion des Code
    p <- p + ggplot2::theme(plot.margin = grid::unit(c(0, 0, 
                  1, 0), "lines")) 
    
  3. Run Sie gerade so erstellt, dass my_ggMarginal verfügbar sein wird, in Ihrem aktuellen Arbeitsbereich.

  4. Führen Sie Ihre neue Funktion auf bing:

    my_ggMarginal(bing, type = "histogram", bins=6, size=10) 
    
+0

Sehr clevere Lösung. Hätte über das Erstellen eines Wrappers nachgedacht, wäre aber vielleicht nicht mutig genug gewesen. 1 war zu viel für mich, aber es stellte sich heraus, dass 0,02 genau richtig war und den Graphen überhaupt nicht verzerrte. Vielen Dank! Ich werde Ihnen die Kontrolle geben, wenn niemand eine direktere Lösung hat. – Bajcz

Verwandte Themen