Tiêu đề lô trung tâm trong ggplot2


256

Xin chào mã đơn giản này (và tất cả các tập lệnh của tôi từ sáng nay) đã bắt đầu cho tôi một tiêu đề trung tâm trong ggplot2

Ubuntu version: 16.04

R studio version: Version 0.99.896

R version: 3.3.2

GGPLOT2 version: 2.2.0

Tôi mới cài đặt ở trên sáng nay để thử và sửa lỗi này ....

dat <- data.frame(
time = factor(c("Lunch","Dinner"), levels=c("Lunch","Dinner")),
total_bill = c(14.89, 17.23)
)

# Add title, narrower bars, fill color, and change axis labels
ggplot(data=dat, aes(x=time, y=total_bill, fill=time)) + 
  geom_bar(colour="black", fill="#DD8888", width=.8, stat="identity") + 
  guides(fill=FALSE) +
  xlab("Time of day") + ylab("Total bill") +
  ggtitle("Average bill for 2 people")

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


53
sử dụng... + theme(plot.title = element_text(hjust = 0.5))
J_F

Câu trả lời:


335

Từ các tin tức phát hành của ggplot 2.2.0: "Tiêu đề cốt truyện chính hiện được căn trái để hoạt động tốt hơn với phụ đề" . Xem thêm plot.titleđối số trong ?theme: "căn lề trái theo mặc định".

Như được chỉ ra bởi @J_F, bạn có thể thêm theme(plot.title = element_text(hjust = 0.5))vào giữa tiêu đề.

ggplot() +
  ggtitle("Default in 2.2.0 is left-aligned")

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

ggplot() +
  ggtitle("Use theme(plot.title = element_text(hjust = 0.5)) to center") +
  theme(plot.title = element_text(hjust = 0.5))

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


Khi tôi sử dụng thay vào đó, ... theme(plot.title = element_text(hjust = 'center'))tôi nhận được thông báo cảnh báo lỗi: 1: In unit(rep(xp, n), "npc") : NAs introduced by coercionv2: In validDetails.text(x) : NAs introduced by coercion và không có tiêu đề. Đây có phải là một lỗi?
James Hirschorn 17/03/2017

2
@JamesHirschorn Đây không phải là một lỗi. Giá trị được sử dụng hjustphải là số.
Stibu

kể từ phiên bản ggplot2 3.3.0, tiêu đề được đặt ở giữa.
Akronix

Nếu bạn quan tâm đến cách khác: chuyển từ trung tâm sang căn lề trái, thì bạn có thể sử dụng câu trả lời này của SO: stackoverflow.com/a/57792897/2904315
Akronix

Tôi đã thêm mã này theme(plot.title = element_text(hjust = 0.5)), nhưng nó không hoạt động, thật lạ.
ahbon

134

Như đã nêu trong câu trả lời của Henrik , các tiêu đề được căn trái theo mặc định bắt đầu bằng ggplot 2.2.0. Các tiêu đề có thể được tập trung bằng cách thêm phần này vào cốt truyện:

theme(plot.title = element_text(hjust = 0.5))

Tuy nhiên, nếu bạn tạo nhiều lô, có thể rất tẻ nhạt khi thêm dòng này ở mọi nơi. Sau đó, người ta cũng có thể thay đổi hành vi mặc định của ggplot với

theme_update(plot.title = element_text(hjust = 0.5))

Khi bạn đã chạy dòng này, tất cả các lô được tạo sau đó sẽ sử dụng cài đặt chủ đề plot.title = element_text(hjust = 0.5)làm mặc định của chúng:

theme_update(plot.title = element_text(hjust = 0.5))
ggplot() + ggtitle("Default is now set to centered")

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

Để quay lại cài đặt mặc định ggplot2 ban đầu, bạn có thể khởi động lại phiên R hoặc chọn chủ đề mặc định với

theme_set(theme_gray())

2

Các ggeasygói có một chức năng gọi là easy_center_title()để làm việc đó. Tôi thấy nó hấp dẫn hơn nhiều theme(plot.title = element_text(hjust = 0.5))và nó dễ nhớ hơn nhiều.

ggplot(data = dat, aes(time, total_bill, fill = time)) + 
  geom_bar(colour = "black", fill = "#DD8888", width = .8, stat = "identity") + 
  guides(fill = FALSE) +
  xlab("Time of day") +
  ylab("Total bill") +
  ggtitle("Average bill for 2 people") +
  ggeasy::easy_center_title()

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

Lưu ý rằng khi viết câu trả lời này, bạn sẽ cần cài đặt phiên bản phát triển ggeasytừ GitHub để sử dụng easy_center_title(). Bạn có thể làm như vậy bằng cách chạy remotes::install_github("jonocarroll/ggeasy").

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.