2017-09-18 10 views
1

Der "lege artis" Weg zu zentrieren rechtfertigen einen Grundstücks-Titel in ggplot - plot.title = element_text(hjust = 0.5) - zentriert den Titel über Grundstück ohne Achsenbeschriftungen.So zentrieren ggplot plot title

Dies kann hässlich werden, wenn die Achsenbeschriftungen sehr lang sind, wie diese Plot von Songs in Mary Poppins Soundtrack vs. ihre Zeichenlänge.

length of songs in Mary Poppins Soundrack

library(tidyverse) 

mary_poppins <- data_frame(song = c("Overture", "Sister Suffragette", "The Life I Lead", "The Perfect Nanny", "A Spoonful of Sugar", "Pavement Artist", "Jolly Holiday", "Supercalifragilisticexpialidocious", "Stay Awake", "I Love to Laugh", "A British Bank", "Feed the Birds ", "Fidelity Fiduciary Bank", "Chim Chim Cher-ee", "Step in Time", "A Man Has Dreams", "Let's Go Fly a Kite" 
)) 

mary_poppins <- mary_poppins %>% 
    mutate(len = nchar(song)) 

ggplot(data = mary_poppins, aes(x = reorder(song, len), y = len)) + 
    geom_col(fill = "firebrick") + 
    coord_flip() + 
    theme_light() + 
    theme(axis.title.y = element_blank(), 
     axis.text = element_text(size = rel(1.5)), 
     plot.title = element_text(size = rel(2.5), face = "bold", hjust = 0.5, 
            margin = margin(t = 10, b = 20, unit = "pt"))) + 
    ggtitle("Mary Poppins") + 
    ylab("Lenght of title (characters)") 

Gibt es eine Möglichkeit den Titel über die grundstueckflaeche zum Zentrum, d.h. einschließlich des Bereichs, der von Achsenbeschriftungen übernommen wurde?

Antwort

4

Alternativ können Sie gridExtra::grid.arrange und grid::textGrob verwenden, um den Titel zu erstellen, ohne ihn optisch auffüllen zu müssen. Dies erzeugt im Prinzip ein separates Plot-Objekt mit Ihrem Titel und klebt es oben, unabhängig vom Inhalt Ihres ggplot Aufrufs.

Speichern Sie zunächst Ihren gesamten ggplot Aufruf in einer Variablen, z. p1:

grid.arrange(textGrob("Mary Poppins", 
       gp = gpar(fontsize = 2.5*11, fontface = "bold")), 
      p1, 
      heights = c(0.1, 1)) 

Sie haben Ihre theme() Einstellungen gpar() zu übersetzen. Die Basisgröße von theme_light ist 11, wo die 2.5 * 11 herkommt (und die 2.5 von Ihrer rel(2.5)).

enter image description here

Der hier Vorteil ist, dass Sie wissen, dass Ihr Titel wirklich zentriert werden, nicht nur nahe genug mit dem Auge.

+0

danke - das ist in der Tat eine bessere Lösung als Polsterungsräume! –

1

Lösung weißen Raum zum Zentrum Titel hinzufügen:

Leerzeichen hinzufügen nach dem Titel mit:

ggtitle(paste0("Mary Poppins", paste0(rep("", 30), collapse = " "))) 

Für die Ausgabe wie folgt aus:

enter image description here

Nicht perfekte Lösung, aber funktioniert.