Як змінити колір тла ділянки, зробленого за допомогою ggplot2


95

За замовчуванням ggplot2 видає графіки із сірим фоном. Як змінити колір тла сюжету?

Наприклад, сюжет, створений за допомогою наступного коду:

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

Відповіді:


120

Щоб змінити колір фону панелі, використовуйте наступний код:

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

Щоб змінити колір ділянки (але не колір панелі), ви можете:

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

Тут див. Докладнішу інформацію про тему. Короткий довідник щодо легенд, осей та тем .


39
Тут також є theme_bwбілий фон і сірі лінії. Я використовую його весь час, так як у друку він виглядає набагато краще, ніж сірий фон за замовчуванням:myplot + theme_bw()
ROLO

@ROLO: Приємно! Чи є спосіб застосувати це до всіх сюжетів за замовчуванням?
krlmlr

11
Покладіть це на початок свого сценарію за замовчуванням ggplots за замовчуванням: ggplot <- function(...) { ggplot2::ggplot(...) + theme_bw() }
ROLO

1
@ROLO заслуговує власної відповіді, тим більше, що відповідь Джека не змінює колір ліній сітки.
naught101

7
Зверніть увагу , що optsі theme_rectзасуджуються в нових версіях ggplot2. (0,9.3). Тож новою версією другої команди стане:myplot + theme(plot.background = element_rect(fill='green', colour='red'))
Рам Нарасимхан

50

Щоб уникнути застарілого optsта theme_rectвикористовуйте:

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

Щоб визначити власну власну тему на основі theme_gray, але з деякими змінами та кількома доданими додатками, включаючи контроль кольору / розміру сітки лінії (доступні інші варіанти для гри на 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")
    )   
}

Щоб зробити вашу власну тему за замовчуванням, коли ggplot буде викликано в майбутньому, без маскування:

theme_set(theme_jack())

Якщо ви хочете змінити елемент поточно заданої теми:

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

Щоб зберегти поточну тему за замовчуванням як об’єкт:

theme_pink <- theme_get()

Зауважте, що theme_pinkце список, тоді як це theme_jackбуло функцією. Отже, щоб повернути тему до теми topic_jack, theme_set(theme_jack())тоді як повернутися до теми theme_pink theme_set(theme_pink).

Ви можете замінити theme_grayна theme_bwу визначенні , theme_jackякщо ви віддаєте перевагу. Щоб ваша спеціальна тема нагадувала, theme_bwале з вимкненими лініями сітки (x, y, основні та другорядні):

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

Нарешті, більш радикальна тема, корисна при побудові хороплетів чи інших карт у ggplot, заснована на обговоренні тут, але оновлена, щоб уникнути застарілості. Метою тут є видалити сірий фон та будь-які інші функції, які можуть відволікати увагу від карти.

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

1
Це дуже корисно, дякую. FYI, я виявив, що аргумент plot.backgroundпотрібно передати theme. Інші аргументи необов’язкові.
Гонки на Tadpole

1

Ось власна тема, щоб зробити фон ggplot2 білим, і купа інших змін, що добре для публікацій та плакатів. Просто торкніться + міфема. Якщо ви хочете додати або змінити параметри за + темою після + mytheme, він просто замінить ці параметри від + mytheme.

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

власна тема ggplot

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.