Ggplot2 ile yapılmış bir grafiğin arka plan rengini nasıl değiştiririm


101

Varsayılan olarak, ggplot2 gri arka plana sahip grafikler üretir. Arsa arka planının rengini nasıl değiştiririm?

Örneğin, aşağıdaki kod tarafından üretilen bir arsa:

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

Yanıtlar:


130

Panelin arka plan rengini değiştirmek için aşağıdaki kodu kullanın:

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

Çizimin rengini değiştirmek için (ancak panelin rengini değiştirmek için değil) şunları yapabilirsiniz:

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

Daha fazla tema ayrıntısı için buraya bakın Açıklamalar , eksenler ve temalar için hızlı başvuru sayfası .


42
Ayrıca, theme_bwsize beyaz bir arka plan ve gri kılavuz çizgileri veren. Her zaman kullanıyorum, çünkü baskıda varsayılan gri arka plandan çok daha iyi görünüyor:myplot + theme_bw()
ROLO

@ROLO: Güzel! Bunu varsayılan olarak tüm grafiklere uygulamanın bir yolu var mı?
krlmlr

12
Varsayılan siyah-beyaz ggplots için bunu komut dosyanızın başına koyun: ggplot <- function(...) { ggplot2::ggplot(...) + theme_bw() }
ROLO

1
@ROLO kendi cevabını hak ediyor, özellikle de Jack'in cevabı ızgara çizgilerinin rengini değiştirmediği için.
naught101

7
Not optsve theme_rectggplot2 yeni sürümlerinde kaldırılmıştır. (0.9.3). Böylece ikinci komutun daha yeni versiyonu şöyle olacaktı:myplot + theme(plot.background = element_rect(fill='green', colour='red'))
Ram Narasimhan

50

Kullanımdan kaldırılmasını önlemek optsve theme_rectkullanmak için:

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

Theme_gray'e dayalı olarak kendi özel temanızı tanımlamak için, ancak bazı değişiklikleriniz ve kılavuz çizgisi renginin / boyutunun kontrolü dahil olmak üzere birkaç ek özellik (ggplot2.org'da oynamak için daha fazla seçenek mevcuttur ):

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

Özel temanızı, ggplot gelecekte maskeleme olmadan çağrıldığında varsayılan yapmak için:

theme_set(theme_jack())

Mevcut ayarlanmış temanın bir öğesini değiştirmek istiyorsanız:

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

Mevcut varsayılan temayı bir nesne olarak saklamak için:

theme_pink <- theme_get()

Bunun theme_pinkbir liste, oysa theme_jackbir işlev olduğuna dikkat edin . Bu yüzden temayı theme_jack'e theme_set(theme_jack())döndürmek için, theme_pink kullanımına dönmek için ise kullanın theme_set(theme_pink).

Sen yerini alabilir theme_graytarafından theme_bwtanımında theme_jackİsterseniz. Özel temanızın benzer olması için theme_bwancak tüm kılavuz çizgileri (x, y, majör ve minör) kapalıyken:

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

Nihayet bir daha radikal tema kullanışlı komplo choropleths tartışma dayalı veya ggplot diğer haritalar burada ama önlemek kaldırılmasından güncellendi. Buradaki amaç gri arka planı ve dikkatinizi dağıtabilecek diğer özellikleri haritadan kaldırmaktır.

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
Bu çok yardımcı oldu, teşekkürler. Bilginize, argümanın plot.backgroundaktarılması gerektiğini buldum theme. Diğer argümanlar isteğe bağlıdır.
Racing Kurbağa Yavrusu

1

İşte ggplot2 arka planını beyaz yapmak için özel bir tema ve yayınlar ve posterler için yararlı olan bir dizi başka değişiklik. Sadece efsane + efsaneye atıfta bulunun. Efsane + 'dan sonra + temaya göre seçenekleri eklemek veya değiştirmek isterseniz, bu seçeneklerin yerine + mitosem olacaktır.

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

özel ggplot teması

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.