Ggplot2'de eksen metninin yazı tipi boyutunu ve yönünü değiştirme


188

Ben x ekseni üzerinde bir kategorik değişken ve y ekseni üzerinde bir sayısal değişken ile bir grafik çiziyorum.

X ekseni için, birçok veri noktası olduğu göz önüne alındığında, varsayılan metin biçimlendirmesi her onay işaretinin etiketinin diğer etiketlerle çakışmasına neden olur. (A) Eksen metnim için yazı tipi boyutunu nasıl değiştirebilirim ve (b) metnin eksene dik olmasını sağlayacak şekilde metnin yönünü nasıl değiştirebilirim?



Stackoverflow.com/q/1330989/946850 ile çakışma var , ancak bu soru metnin yeniden boyutlandırılmasını kapsamıyor.
krlmlr

Yanıtlar:


292

Kullanım 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

resim açıklamasını buraya girin

Burada ggplot'larınızı nasıl biçimlendireceğiniz hakkında birçok iyi bilgi var . Düğmesini kullanarak değiştirebileceğiniz (temel olarak hepsi) parametrelerin tam listesini görebilirsiniz ?theme.


2
Bence öyle olmalı hjust=1.
Artem Sokolov

Doğru! Artem'in yorumuna göre düzeltildi, ancak görüntüyü güncellemedim.
Drew Steen

68

Ditto @Drew Steen kullanımı üzerine theme(). İşte eksen metni ve başlıkları için ortak tema özellikleri.

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

Temayı kullan ():

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

Önceki çözümlere ekleme, ayrıca yazı tipi boyutu belirtebilirsiniz akrabası için base_sizegibi temalar dahil theme_bw()(burada base_sizekullanılarak 11 olan) rel()fonksiyonunu.

Örneğin:

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

5

Birçok parsel oluştururken, küresel olarak ayarlamak mantıklıdır (ilgili kısım ikinci satır, üç satır birlikte çalışan bir örnektir):

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

4

"Fill" niteliğini kullanmak, bu gibi durumlarda yardımcı olur. Metni kullanarak eksenden kaldırabilir element_blank()ve bir göstergeyle çok renkli çubuk grafik gösterebilirsiniz. Aşağıdaki gibi bir tamirhanede parça çıkarma sıklığı çiziyorum

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

Çubuk grafikte birçok çubuk vardı ve hem okunabilir hem de birbiriyle çakışmayacak kadar küçük uygun bir yazı tipi boyutu bulamadığım için benim durumumda bu çözüm için gittim.


0

Çakışan etiketlerle başa çıkmanın başka bir yolu da kullanmaktır 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()

resim açıklamasını buraya girin

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

resim açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.