Lettergrootte en richting van assentekst wijzigen in ggplot2

Ik teken een grafiek met een categorische variabele op de x-as en een numerieke variabele op de y-as.

Voor de x-as zorgt de standaard tekstopmaak ervoor dat het label voor elk vinkje overlapt met andere labels, aangezien er veel gegevenspunten zijn. Hoe verander ik (a) de lettergrootte voor mijn astekst en (b) verander ik de oriëntatie van de tekst zodat de tekst loodrecht op de as staat?


Antwoord 1, autoriteit 100%

Gebruik 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

Er is hierveel goede informatie over het formatteren van uw ggplots. U kunt een volledige lijst met parameters zien die u kunt wijzigen (in principe allemaal) met behulp van ?theme.


Antwoord 2, autoriteit 24%

Idem @Drew Steen over het gebruik van theme(). Hier zijn algemene themakenmerken voor astekst en titels.

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"))

Antwoord 3, autoriteit 7%

Als aanvulling op eerdere oplossingen, kunt u ook de lettergrootte relatieften opzichte van de base_sizeopgeven die is opgenomen in thema’s zoals theme_bw()(waarbij base_sizeis 11) met de functie rel().

Bijvoorbeeld:

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

Antwoord 4, autoriteit 6%

Gebruik thema():

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))

Antwoord 5, autoriteit 2%

Als je veel plots maakt, is het logisch om het globaal in te stellen (relevante deel is de tweede regel, drie regels samen zijn een werkend voorbeeld):

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

Antwoord 6

Het gebruik van het kenmerk “fill” helpt in dit soort gevallen. U kunt de tekst van de as verwijderen met element_blank()en een meerkleurig staafdiagram met een legenda weergeven. Ik bereken een frequentie voor het verwijderen van onderdelen in een reparatiewerkplaats zoals hieronder

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

In mijn geval koos ik voor deze oplossing omdat ik veel balken in het staafdiagram had en ik geen geschikte lettergrootte kon vinden die zowel leesbaar als klein genoeg is om elkaar niet te overlappen.


Antwoord 7

Een andere manier om met overlappende labels om te gaan is het gebruik van 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()

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

Other episodes