Judul Center Plot di ggplot2

256

Hai kode sederhana ini (dan semua skrip saya dari pagi ini) telah mulai memberi saya judul di luar ggplot2

Ubuntu version: 16.04

R studio version: Version 0.99.896

R version: 3.3.2

GGPLOT2 version: 2.2.0

Saya baru saja menginstal di atas pagi ini untuk mencoba dan memperbaiki ini ....

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")

masukkan deskripsi gambar di sini

Christopher John
sumber
53
gunakan... + theme(plot.title = element_text(hjust = 0.5))
J_F

Jawaban:

335

Dari berita rilis ggplot 2.2.0: "Judul plot utama sekarang disejajarkan untuk bekerja lebih baik dengan subtitle" . Lihat juga plot.titleargumen di ?theme: "rata rata kiri".

Seperti yang ditunjukkan oleh @J_F, Anda dapat menambahkan theme(plot.title = element_text(hjust = 0.5))ke tengah judul.

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

masukkan deskripsi gambar di sini

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

masukkan deskripsi gambar di sini

Henrik
sumber
Saat saya menggunakan, ... theme(plot.title = element_text(hjust = 'center'))saya mendapatkan pesan peringatan kesalahan: 1: In unit(rep(xp, n), "npc") : NAs introduced by coercionv2: In validDetails.text(x) : NAs introduced by coercion dan tidak ada judul. Apakah ini bug?
James Hirschorn
2
@JamesHirschorn Ini bukan bug. Nilai yang digunakan hjustharus berupa angka.
Stibu
pada ggplot2 versi 3.3.0, judulnya dipusatkan secara default.
Akronix
Jika Anda tertarik dengan sebaliknya: bergerak dari center-alinged ke left-aligned, maka Anda dapat menggunakan jawaban SO ini: stackoverflow.com/a/57792897/2904315
Akronix
Saya telah menambahkan kode ini theme(plot.title = element_text(hjust = 0.5)), tetapi tidak berhasil, ini aneh.
ahbon
134

Seperti yang dinyatakan dalam jawaban oleh Henrik , judul dibariskan secara default dimulai dengan ggplot 2.2.0. Judul dapat dipusatkan dengan menambahkan ini ke plot:

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

Namun, jika Anda membuat banyak plot, mungkin membosankan untuk menambahkan baris ini di mana-mana. Seseorang kemudian dapat juga mengubah perilaku default ggplot

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

Setelah Anda menjalankan baris ini, semua plot yang dibuat setelahnya akan menggunakan pengaturan tema plot.title = element_text(hjust = 0.5)sebagai default:

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

masukkan deskripsi gambar di sini

Untuk kembali ke pengaturan default ggplot2 asli, Anda dapat memulai kembali sesi R atau memilih tema default

theme_set(theme_gray())
Stibu
sumber
2

The ggeasypaket memiliki fungsi yang disebut easy_center_title()untuk melakukan hal itu. Saya merasa jauh lebih menarik daripada theme(plot.title = element_text(hjust = 0.5))dan itu jauh lebih mudah untuk diingat.

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()

masukkan deskripsi gambar di sini

Perhatikan bahwa saat menulis jawaban ini, Anda harus menginstal versi pengembangan ggeasydari GitHub untuk digunakan easy_center_title(). Anda dapat melakukannya dengan berlari remotes::install_github("jonocarroll/ggeasy").

Thomas Neitmann
sumber