Подтвердить что ты не робот

Как изменить цвет фона графика, сделанного с помощью ggplot2

По умолчанию 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
4b9b3361

Ответ 1

Чтобы изменить цвет фона панели, используйте следующий код:

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

Чтобы изменить цвет сюжета (но не цвет панели), вы можете сделать:

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

Подробнее см. здесь Быстрый справочный лист для легенд, осей и тем.

Ответ 2

Чтобы избежать устаревших 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 - функция. Поэтому, чтобы вернуть тему в тему_jack, используйте theme_set(theme_jack()), тогда как для возврата в theme_pink используйте theme_set(theme_pink).

Вы можете заменить theme_gray на theme_bw в определении theme_jack, если хотите. Для вашей пользовательской темы походите на theme_bw, но со всеми линиями сетки (x, y, major и minor) выключены:

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

Наконец, более радикальная тема полезна при построении choropleths или других карт в 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) 
        )   
}