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?

Anjan
sumber
Dan satu lagi stackoverflow.com/q/8097642/1172302
Nikos Alexandris
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.

Drew Steen
sumber
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"))
metasequoia
sumber
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))
meduvigo
sumber
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))
Megatron
sumber
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()
JJ untuk Transparansi dan Monica
sumber
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.

pengguna131476
sumber
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

HBat
sumber