Bagaimana cara mengubah warna latar belakang plot yang dibuat dengan ggplot2

96

Secara default, ggplot2 menghasilkan plot dengan latar belakang abu-abu. Bagaimana cara mengubah warna latar belakang plot?

Misalnya, plot yang dihasilkan dengan kode berikut:

library(ggplot2)
myplot<-ggplot(data=data.frame(a=c(1,2,3), b=c(2,3,4)), aes(x=a, y=b)) + geom_line()
myplot
Jack Edmonds
sumber

Jawaban:

122

Untuk mengubah warna latar belakang panel, gunakan kode berikut:

myplot + theme(panel.background = element_rect(fill = 'green', colour = 'red'))

Untuk mengubah warna plot (bukan warna panel), Anda dapat melakukan:

myplot + theme(plot.background = element_rect(fill = 'green', colour = 'red'))

Lihat di sini untuk detail tema selengkapnya. Lembar referensi cepat untuk legenda, sumbu, dan tema .

Jack Edmonds
sumber
39
Ada juga theme_bw, memberi Anda latar belakang putih dan garis kisi abu-abu. Saya menggunakannya sepanjang waktu, karena dalam cetakan itu terlihat jauh lebih baik daripada latar belakang abu-abu default:myplot + theme_bw()
ROLO
@ROLO: Bagus! Apakah ada cara untuk menerapkan ini ke semua plot secara default?
krlmlr
11
Letakkan ini di awal skrip Anda untuk ggplots B&W default: ggplot <- function(...) { ggplot2::ggplot(...) + theme_bw() }
ROLO
1
@ROLO yang pantas mendapatkan jawabannya sendiri, apalagi jawaban Jack tidak mengubah warna garis grid.
n nothing101
7
Perhatikan bahwa optsdan theme_recttidak digunakan lagi di versi ggplot2 yang lebih baru. (0.9.3). Jadi versi terbaru dari perintah kedua akan menjadi:myplot + theme(plot.background = element_rect(fill='green', colour='red'))
Ram Narasimhan
50

Untuk menghindari deprecated optsand theme_rectuse:

myplot + theme(panel.background = element_rect(fill='green', colour='red'))

Untuk menentukan tema khusus Anda sendiri, berdasarkan theme_gray tetapi dengan beberapa perubahan Anda dan beberapa tambahan tambahan termasuk kontrol warna / ukuran garis kisi (lebih banyak opsi tersedia untuk dimainkan di ggplot2.org ):

theme_jack <- function (base_size = 12, base_family = "") {
    theme_gray(base_size = base_size, base_family = base_family) %+replace% 
        theme(
            axis.text = element_text(colour = "white"),
            axis.title.x = element_text(colour = "pink", size=rel(3)),
            axis.title.y = element_text(colour = "blue", angle=45),
            panel.background = element_rect(fill="green"),
            panel.grid.minor.y = element_line(size=3),
            panel.grid.major = element_line(colour = "orange"),
            plot.background = element_rect(fill="red")
    )   
}

Untuk menjadikan tema khusus Anda sebagai default saat ggplot dipanggil di masa mendatang, tanpa masking:

theme_set(theme_jack())

Jika Anda ingin mengubah elemen dari tema yang saat ini disetel:

theme_update(plot.background = element_rect(fill="pink"), axis.title.x = element_text(colour = "red"))

Untuk menyimpan tema default saat ini sebagai objek:

theme_pink <- theme_get()

Perhatikan bahwa theme_pinkadalah daftar sedangkan theme_jackfungsi. Jadi untuk mengembalikan tema ke theme_jack gunakan theme_set(theme_jack())sedangkan untuk kembali ke theme_pink gunakan theme_set(theme_pink).

Anda dapat mengganti theme_graydengan theme_bwdalam definisi theme_jackjika Anda mau. Agar tema kustom Anda menyerupai theme_bwtetapi dengan semua garis kisi (x, y, mayor dan minor) dimatikan:

theme_nogrid <- function (base_size = 12, base_family = "") {
    theme_bw(base_size = base_size, base_family = base_family) %+replace% 
        theme(
            panel.grid = element_blank()
    )   
}

Akhirnya tema yang lebih radikal berguna saat merencanakan choropleths atau peta lain di ggplot, berdasarkan diskusi di sini tetapi diperbarui untuk menghindari deprecation. Tujuannya di sini adalah untuk menghapus latar belakang abu-abu, dan fitur lain yang mungkin mengganggu peta.

theme_map <- function (base_size = 12, base_family = "") {
    theme_gray(base_size = base_size, base_family = base_family) %+replace% 
        theme(
            axis.line=element_blank(),
            axis.text.x=element_blank(),
            axis.text.y=element_blank(),
            axis.ticks=element_blank(),
            axis.ticks.length=unit(0.3, "lines"),
            axis.ticks.margin=unit(0.5, "lines"),
            axis.title.x=element_blank(),
            axis.title.y=element_blank(),
            legend.background=element_rect(fill="white", colour=NA),
            legend.key=element_rect(colour="white"),
            legend.key.size=unit(1.2, "lines"),
            legend.position="right",
            legend.text=element_text(size=rel(0.8)),
            legend.title=element_text(size=rel(0.8), face="bold", hjust=0),
            panel.background=element_blank(),
            panel.border=element_blank(),
            panel.grid.major=element_blank(),
            panel.grid.minor=element_blank(),
            panel.margin=unit(0, "lines"),
            plot.background=element_blank(),
            plot.margin=unit(c(1, 1, 0.5, 0.5), "lines"),
            plot.title=element_text(size=rel(1.2)),
            strip.background=element_rect(fill="grey90", colour="grey50"),
            strip.text.x=element_text(size=rel(0.8)),
            strip.text.y=element_text(size=rel(0.8), angle=-90) 
        )   
}
Gegat
sumber
1
Ini sangat membantu, terima kasih. FYI, saya telah menemukan argumen plot.backgroundharus diteruskan theme. Argumen lainnya bersifat opsional.
Balapan Kecebong
1

Berikut adalah tema khusus untuk membuat latar belakang ggplot2 menjadi putih dan banyak perubahan lain yang bagus untuk publikasi dan poster. Cukup gunakan + mitos. Jika Anda ingin menambah atau mengubah opsi dengan + tema setelah + mitos, itu hanya akan menggantikan opsi dari + mitos.

library(ggplot2)
library(cowplot)
theme_set(theme_cowplot())

mytheme = list(
    theme_classic()+
        theme(panel.background = element_blank(),strip.background = element_rect(colour=NA, fill=NA),panel.border = element_rect(fill = NA, color = "black"),
              legend.title = element_blank(),legend.position="bottom", strip.text = element_text(face="bold", size=9),
              axis.text=element_text(face="bold"),axis.title = element_text(face="bold"),plot.title = element_text(face = "bold", hjust = 0.5,size=13))
)

ggplot(data=data.frame(a=c(1,2,3), b=c(2,3,4)), aes(x=a, y=b)) + mytheme + geom_line()

tema ggplot khusus

Isaac Zhao
sumber