Mengubah ukuran font dan arah teks sumbu di ggplot2


188

Saya merencanakan grafik dengan variabel kategorikal pada sumbu x dan variabel numerik pada sumbu y.

Untuk sumbu x, mengingat bahwa ada banyak titik data, pemformatan teks default menyebabkan label untuk setiap tanda centang tumpang tindih dengan label lain. Bagaimana cara (a) mengubah ukuran font untuk teks sumbu saya dan (b) mengubah orientasi teks sehingga teks tegak lurus terhadap sumbu?



Ada tumpang tindih dengan stackoverflow.com/q/1330989/946850 , tetapi pertanyaan itu tidak mencakup pengubahan ukuran teks.
krlmlr

Jawaban:


292

Gunakan 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

masukkan deskripsi gambar di sini

Ada banyak informasi bagus tentang cara memformat ggplot Anda di sini . Anda dapat melihat daftar parameter lengkap yang dapat Anda modifikasi (pada dasarnya, semuanya) menggunakan ?theme.


2
Saya pikir seharusnya begitu hjust=1.
Artem Sokolov

Benar! Dikoreksi sesuai komentar Artem, tetapi saya tidak memperbarui gambar.
Drew Steen

68

Ditto @Drew Steen tentang penggunaan theme(). Berikut adalah atribut tema umum untuk teks dan judul sumbu.

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

Gunakan tema ():

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

Menambahkan ke solusi sebelumnya, Anda juga dapat menentukan ukuran font relatif terhadap yang base_sizetermasuk dalam tema seperti theme_bw()(di mana base_size11) menggunakan rel()fungsi.

Sebagai contoh:

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

5

Saat membuat banyak plot, masuk akal untuk mengaturnya secara global (bagian yang relevan adalah baris kedua, tiga baris bersamaan adalah contoh yang berfungsi):

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

4

Menggunakan atribut "isi" membantu dalam kasus-kasus seperti ini. Anda dapat menghapus teks dari sumbu menggunakan element_blank()dan menampilkan bagan batang multi warna dengan legenda. Saya merencanakan frekuensi pemindahan suku cadang di bengkel seperti di bawah ini

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

Saya pergi untuk solusi ini dalam kasus saya karena saya memiliki banyak bar di bar chart dan saya tidak dapat menemukan ukuran font yang cocok yang dapat dibaca dan juga cukup kecil untuk tidak saling tumpang tindih.


0

Cara lain untuk menangani label yang tumpang tindih adalah menggunakan 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()

masukkan deskripsi gambar di sini

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

masukkan deskripsi gambar di sini

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.