2015-08-28 26 views
35

Wie kann ich den Abstand zwischen den Schlüsseln der Legende von ggplot2 plot erhöhen?ggplot2 vergrößert den Abstand zwischen den Legendenschlüsseln

library(ggplot2) 
ggplot(aes(mpg, wt, colour = factor(cyl)), 
     , data = mtcars) + 
     geom_point() + 
    theme(legend.direction = "horizontal", 
     legend.position = "bottom") + 
    guides(color = guide_legend(nrow=2)) 

enter image description here

Ich suche eine ggplot2 Option, die eine Art vertikaler Einstellung zwischen (Taste 4 und Taste 6) in der Handlung oben hinzufügen? Soll ich einen benutzerdefinierten Legendenschlüssel erstellen?

PS: Ich möchte den Leerraum zwischen den Boxen nicht zwischen den Etiketten zu erhöhen.

die gewünschte Handlung ist:

enter image description here

HINWEIS: die Keine Frage nicht von der anderen Frage dupliziert. Wir möchten hier einen vertikalen Abstand zwischen Elementen, die bereits in mehreren Zeilen sind, hinzufügen. In der anderen Frage haben wir 1-Zeilen-Legende und wir wollen Leerzeichen (horizontal) zwischen den Elementen hinzufügen.

+1

Mögliche Duplikat [diese] (http://stackoverflow.com/ Fragen/11366964/is-there-a-way-to-change-the-Abstand zwischen-legende-items-in-ggplot2). Hat das dein Problem gelöst? – Heroka

+0

@Heroka no.it ist kein Duplikat. Ich möchte die Schlüsselgröße nicht ändern. nur der Abstand zwischen den Tasten. Sie können die Lösung in der Verknüpfung versuchen, dies zu überprüfen. – agstudy

+0

'Grid' oder' GridExtra' könnte helfen, ich habe sie noch nie benutzt ... [Die 'GridExtra'-Vignette] (https://github.com/baptiste/gridextra/wiki/arrange-ggplot#Legends) sieht etwas vielversprechend aus, ist aber bei weitem keine klare Lösung. – maj

Antwort

39

Eine Alternative (und wahrscheinlich auch einfacher) Lösung legend.key und legend.key.size im theme Teil des Codes verwendet:

ggplot(data = mtcars, aes(mpg, wt, colour = factor(cyl))) + 
    geom_point() + 
    guides(color = guide_legend(nrow = 2)) + 
    theme(legend.direction = 'horizontal', 
     legend.position = 'bottom', 
     legend.key = element_rect(size = 5), 
     legend.key.size = unit(1.5, 'lines')) 

ergibt dies:

enter image description here


Falls Sie theme_bw oder theme_classic bevor die Legende Manipulation anrufen, sollten Sie die Farbe der Legende Rechteck gesetzt:

legend.key = element_rect(size = 5, color = 'white') #or: color = NA 
+0

Können Sie den Unterschied zwischen der Größeneigenschaft von "legend.key" und der Eigenschaft "lines" von "legend.key.size" erklären. Welche steuert den Abstand zwischen den Tasten (d. H. Die grauen Kästchen + das Etikett)? –

+0

@BerkU. Der 'size' Parameter von' legend.key' bestimmt die Größe der Begrenzungslinie. Die Eigenschaft 'lines' von' legende.key.size' bestimmt die Größe der ganzen Box. – Jaap

+0

Das hat meine Situation nicht gelöst, weil die "Linien" einige Legendensymbole zusammen mit der Box vergrößert haben.In meiner Situation hat das Punktsymbol nicht zugenommen (wie in deinem Beispiel), aber das Liniensymbol hat es getan. Da meine Linien vertikal waren, wurde die Box immer größer, da "Linien" vergrößert wurden, ohne den Abstand zwischen den beiden Säulen der Legende zu vergrößern. Werde mich melden, wenn ich eine Lösung finde. – PatrickT

7

Hier eine Lösung mit gtable. Grundsätzlich extrahiere ich die Legende grobs Tabelle und ich füge eine Zeile in der Legendentabelle hinzu.

library(gtable) 
library(grid) 
## transform the ggplot to a grobs table 
p_table <- ggplot_gtable(ggplot_build(p)) 
## extract legend 
leg <- which(sapply(p_table$grobs, function(x) x$name) == "guide-box") 
## this is the tricky part ! 
## add a row in the second position (pos=2) 
p_table$grobs[[leg]]$grobs[[1]] <- 
    gtable_add_rows(p_table$grobs[[leg]]$grobs[[1]], 
        unit(0.5, "line"), ## you can increase the height here 
        pos=2)    ## since I have 2 rows , I insert it in the middle 
plot(p_table) 

PS: Ich dont‘weiß hier, wie die Tabelle wieder auf ein Grundstück zu zwingen! vielleicht jemand anderes kann hier helfen (ich es gerade bin Plotten und verlieren die Objektstruktur)

enter image description here

Verwandte Themen