मैं ggplot2 के साथ बने प्लॉट की पृष्ठभूमि का रंग कैसे बदलूं


96

डिफ़ॉल्ट रूप से, 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

जवाबों:


122

पैनल की पृष्ठभूमि का रंग बदलने के लिए, निम्नलिखित कोड का उपयोग करें:

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()
रोलो

@ कैरोल: अच्छा! क्या डिफ़ॉल्ट रूप से सभी भूखंडों पर इसे लागू करने का कोई तरीका है?
krlmlr

11
इसे डिफ़ॉल्ट B & W ggplots के लिए अपनी स्क्रिप्ट की शुरुआत में रखें: ggplot <- function(...) { ggplot2::ggplot(...) + theme_bw() }
ROLO

1
@ वह जो इसका जवाब चाहता है, विशेष रूप से, क्योंकि जैक का जवाब ग्रिड लाइनों का रंग नहीं बदलता है।
naught101

7
ध्यान दें कि optsऔर theme_rectggplot2 के नए संस्करणों में पदावनत हैं। (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एक फ़ंक्शन था। इसलिए theme_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()
    )   
}

अंत में एक अधिक उग्र उपयोगी विषय जब साजिश रचने 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) 
        )   
}

1
यह बहुत मददगार है, धन्यवाद। FYI करें, मैंने पाया है कि तर्क plot.backgroundको पारित किया जाना चाहिए theme। अन्य तर्क वैकल्पिक हैं।
रेसिंग टैडपोल

1

यहाँ ggplot2 पृष्ठभूमि को सफेद बनाने के लिए एक कस्टम विषय है और अन्य परिवर्तनों का एक समूह है जो प्रकाशनों और पोस्टरों के लिए अच्छा है। बस से निपटने के लिए + mytheme। यदि आप + 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 Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.