Ändern der Schriftgröße und der Richtung des Achsentextes in ggplot2


188

Ich zeichne ein Diagramm mit einer kategorialen Variablen auf der x-Achse und einer numerischen Variablen auf der y-Achse.

Da für die x-Achse viele Datenpunkte vorhanden sind, überlappt die Standardtextformatierung die Beschriftung für jedes Häkchen mit anderen Beschriftungen. Wie ändere ich (a) die Schriftgröße für meinen Achsentext und (b) die Ausrichtung des Textes so, dass der Text senkrecht zur Achse ist?



Es gibt Überschneidungen mit stackoverflow.com/q/1330989/946850 , aber diese Frage betrifft nicht die Größenänderung des Textes.
krlmlr

Antworten:


291

Verwendung theme():

d <- data.frame(x=gl(10, 1, 10, labels=paste("long text label ", letters[1:10])), y=rnorm(10))
ggplot(d, aes(x=x, y=y)) + geom_point() +
    theme(text = element_text(size=20),
        axis.text.x = element_text(angle=90, hjust=1)) 
#vjust adjust the vertical justification of the labels, which is often useful

Geben Sie hier die Bildbeschreibung ein

Es gibt viele gute Informationen darüber , wie Sie Ihre ggplots zu formatieren hier . Sie können eine vollständige Liste der Parameter anzeigen, mit denen Sie (im Grunde alle) Änderungen vornehmen können ?theme.


2
Ich denke es sollte sein hjust=1.
Artem Sokolov

Wahr! Nach Artems Kommentar korrigiert, aber ich habe das Bild nicht aktualisiert.
Drew Steen

67

Ditto @Drew Steen über die Verwendung von theme(). Hier finden Sie allgemeine Themenattribute für Achsentext und Titel.

ggplot(mtcars, aes(x = factor(cyl), y = mpg))+
  geom_point()+
  theme(axis.text.x = element_text(color = "grey20", size = 20, angle = 90, hjust = .5, vjust = .5, face = "plain"),
        axis.text.y = element_text(color = "grey20", size = 12, angle = 0, hjust = 1, vjust = 0, face = "plain"),  
        axis.title.x = element_text(color = "grey20", size = 12, angle = 0, hjust = .5, vjust = 0, face = "plain"),
        axis.title.y = element_text(color = "grey20", size = 12, angle = 90, hjust = .5, vjust = .5, face = "plain"))

19

Verwenden Sie theme ():

d <- data.frame(x=gl(10, 1, 10, labels=paste("long text label ", letters[1:10])), y=rnorm(10))
ggplot(d, aes(x=x, y=y)) + geom_point() +
theme(text = element_text(size=20))

19

Wenn Sie zu früheren Lösungen hinzufügen, können Sie auch die Schriftgröße im Verhältnis zu den base_sizein Themen enthaltenen Elementen wie theme_bw()(wobei base_size11 ist) mithilfe von angebenrel() Funktion .

Beispielsweise:

ggplot(mtcars, aes(disp, mpg)) +
  geom_point() +
  theme_bw() +
  theme(axis.text.x=element_text(size=rel(0.5), angle=90))

4

Die Verwendung des Attributs "Füllen" hilft in solchen Fällen. Sie können den Text mithilfe eines element_blank()mehrfarbigen Balkendiagramms mit einer Legende von der Achse entfernen und anzeigen. Ich zeichne eine Häufigkeit der Teileentfernung in einer Reparaturwerkstatt wie unten

ggplot(data=df_subset,aes(x=Part,y=Removal_Frequency,fill=Part))+geom_bar(stat="identity")+theme(axis.text.x  = element_blank())

Ich habe mich in meinem Fall für diese Lösung entschieden, da ich viele Balken im Balkendiagramm hatte und keine geeignete Schriftgröße finden konnte, die sowohl lesbar als auch klein genug ist, um sich nicht zu überlappen.


4

Wenn Sie viele Diagramme erstellen, ist es sinnvoll, sie global festzulegen (relevanter Teil ist die zweite Zeile, drei Zeilen zusammen sind ein Arbeitsbeispiel):

   library('ggplot2')
   theme_update(text = element_text(size=20))
   ggplot(mpg, aes(displ, hwy, colour = class)) + geom_point()

0

Eine andere Möglichkeit, mit überlappenden Etiketten umzugehen, ist die Verwendung guide = guide_axis(n.dodge = 2).

library(dplyr)
library(tibble)
library(ggplot2)

dt <- mtcars %>% rownames_to_column("name") %>% 
  dplyr::filter(cyl == 4)

# Overlapping labels
ggplot(dt, aes(x = name, y = mpg)) + geom_point()

Geben Sie hier die Bildbeschreibung ein

ggplot(dt, aes(x = name, y = mpg)) + geom_point() +
  scale_x_discrete(guide = guide_axis(n.dodge = 2))

Geben Sie hier die Bildbeschreibung ein

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.