Ä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?

Anjan
quelle
Und noch eine stackoverflow.com/q/8097642/1172302
Nikos Alexandris
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.

Drew Steen
quelle
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"))
Metasequoia
quelle
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))
Meduvigo
quelle
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))
Megatron
quelle
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.

user131476
quelle
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()
JJ für Transparenz und Monica
quelle
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

HBat
quelle