Thay đổi kích thước phông chữ và hướng của văn bản trục trong ggplot2


188

Tôi đang vẽ đồ thị với một biến phân loại trên trục x và một biến số trên trục y.

Đối với trục x, do có nhiều điểm dữ liệu, định dạng văn bản mặc định làm cho nhãn cho mỗi dấu tick trùng với các nhãn khác. Làm cách nào để tôi (a) thay đổi kích thước phông chữ cho văn bản trục của tôi và (b) thay đổi hướng của văn bản để văn bản vuông góc với trục?



Có sự trùng lặp với stackoverflow.com/q/1330989/946850 , nhưng câu hỏi đó không bao gồm thay đổi kích thước văn bản.
krlmlr

Câu trả lời:


291

Sử dụng 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

nhập mô tả hình ảnh ở đây

Có rất nhiều thông tin tốt về cách định dạng ggplots của bạn ở đây . Bạn có thể thấy một danh sách đầy đủ các tham số bạn có thể sửa đổi (về cơ bản, tất cả chúng) bằng cách sử dụng ?theme.


2
Tôi nghĩ rằng nó nên được hjust=1.
Artem Sokolov

Thật! Đã sửa theo nhận xét của Artem, nhưng tôi không cập nhật hình ảnh.
Drew Steen

67

Ditto @Drew Steen về việc sử dụng theme(). Dưới đây là các thuộc tính chủ đề phổ biến cho văn bản trục và tiêu đề.

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

Sử dụng chủ đề ():

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

Thêm vào các giải pháp trước đó, bạn cũng có thể chỉ định kích thước phông chữ tương ứng với các base_sizechủ đề được bao gồm trong các chủ đề, chẳng hạn như theme_bw()(trong đó base_sizelà 11) bằng cách sử dụng rel()chức năng.

Ví dụ:

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

4

Sử dụng thuộc tính "điền" sẽ giúp trong trường hợp như thế này. Bạn có thể xóa văn bản khỏi trục bằng cách sử dụng element_blank()và hiển thị biểu đồ thanh nhiều màu với chú thích. Tôi đang vẽ một tần số loại bỏ một phần trong một cửa hàng sửa chữa như dưới đây

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

Tôi đã tìm giải pháp này trong trường hợp của mình vì tôi có nhiều thanh trong biểu đồ thanh và tôi không thể tìm thấy một cỡ chữ phù hợp vừa có thể đọc được và cũng đủ nhỏ để không chồng chéo lẫn nhau.


4

Khi thực hiện nhiều ô, sẽ hợp lý khi đặt nó trên toàn cầu (phần có liên quan là dòng thứ hai, ba dòng cùng nhau là một ví dụ hoạt động):

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

0

Một cách khác để đối phó với các nhãn chồng chéo là sử dụng 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()

nhập mô tả hình ảnh ở đây

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

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.