Làm cách nào để thay đổi màu nền của một ô được tạo bằng ggplot2


95

Theo mặc định, ggplot2 tạo ra các ô có nền màu xám. Làm cách nào để thay đổi màu nền của mảnh đất?

Ví dụ: một âm mưu được tạo bởi mã sau:

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

Câu trả lời:


120

Để thay đổi màu nền của bảng điều khiển, hãy sử dụng mã sau:

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

Để thay đổi màu của ô (nhưng không phải màu của bảng), bạn có thể thực hiện:

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

Xem tại đây để biết thêm chi tiết chủ đề Bảng tham khảo nhanh về truyền thuyết, trục và chủ đề .


39
Ngoài ra còn có theme_bw, cung cấp cho bạn nền trắng và đường lưới màu xám. Tôi sử dụng nó mọi lúc, như trong in ấn có vẻ tốt hơn nhiều so với nền màu xám mặc định:myplot + theme_bw()
Rolo

@ROLO: Đẹp! Có cách nào để áp dụng điều này cho tất cả các mảnh đất theo mặc định không?
krlmlr

11
Đặt điều này ở đầu tập lệnh của bạn cho ggplots B&W mặc định: ggplot <- function(...) { ggplot2::ggplot(...) + theme_bw() }
ROLO

1
@ROLO xứng đáng là câu trả lời của riêng nó, đặc biệt là vì câu trả lời của Jack không thay đổi màu của các đường lưới.
naught101

7
Lưu ý rằng optstheme_rectkhông được dùng nữa trong các phiên bản mới hơn của ggplot2. (0,9.3). Vì vậy, các phiên bản mới hơn của lệnh thứ hai sẽ trở thành:myplot + theme(plot.background = element_rect(fill='green', colour='red'))
Ram Narasimhan

50

Để tránh không dùng nữa optstheme_rectsử dụng:

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

Để xác định chủ đề tùy chỉnh của riêng bạn, dựa trên theme_gray nhưng với một số thay đổi của bạn và một số tính năng bổ sung được thêm vào bao gồm kiểm soát màu sắc / kích thước đường lưới (có thêm tùy chọn để chơi tại 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")
    )   
}

Để đặt chủ đề tùy chỉnh của bạn làm chủ đề mặc định khi ggplot được gọi trong tương lai mà không cần che:

theme_set(theme_jack())

Nếu bạn muốn thay đổi một phần tử của chủ đề hiện đã đặt:

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

Để lưu trữ chủ đề mặc định hiện tại dưới dạng một đối tượng:

theme_pink <- theme_get()

Lưu ý rằng đó theme_pinklà một danh sách trong khi đó theme_jacklà một hàm. Vì vậy, để trả lại chủ đề để sử dụng theme_jack theme_set(theme_jack())trong khi quay lại sử dụng theme_pink theme_set(theme_pink).

Bạn có thể thay thế theme_graybằng theme_bwtrong định nghĩa của theme_jacknếu bạn thích. Để chủ đề tùy chỉnh của bạn giống theme_bwnhưng với tất cả các đường lưới (x, y, chính và phụ) bị tắt:

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

Cuối cùng, một chủ đề cấp tiến hơn hữu ích khi vẽ đồ thị choropleth hoặc các bản đồ khác trong ggplot, dựa trên thảo luận ở đây nhưng được cập nhật để tránh bị phản đối. Mục đích ở đây là loại bỏ nền xám và bất kỳ đối tượng địa lý nào khác có thể làm mất tập trung trên bản đồ.

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
Điều này là rất hữu ích, cảm ơn. FYI, tôi thấy đối số plot.backgroundphải được chuyển tới theme. Các đối số khác là tùy chọn.
Đua xe Nòng nọc vào

1

Đây là một chủ đề tùy chỉnh để làm cho nền ggplot2 có màu trắng và một loạt các thay đổi khác phù hợp với các ấn phẩm và áp phích. Chỉ cần nhấn vào + mytheme. Nếu bạn muốn thêm hoặc thay đổi các tùy chọn theo + chủ đề sau + mytheme, nó sẽ chỉ thay thế các tùy chọn đó từ + 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()

chủ đề ggplot tùy chỉnh

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.