2015-10-04 4 views
5

आर में किसी ऑब्जेक्ट में ggplot शैली को सहेजने का सबसे अच्छा तरीका क्या है? मुझे पता है कि ggplot में कस्टम थीम हैं, लेकिन वहां बहुत से दृश्य डिज़ाइन हैं जो थीम फ़ंक्शन में फिट नहीं होते हैं।ऑब्जेक्ट में कस्टम ggplot शैलियों को स्टोर करें

यहां कुछ ऐसे नमूना (पिघल) डेटा और एक ग्राफ मैं

library(ggplot2) 

mdf <- structure(list(group = structure(c(2L, 3L, 1L, 2L, 3L, 1L), .Label = c("democrat", 
"founder", "libertarian"), class = "factor"), variable = structure(c(1L, 
1L, 1L, 2L, 2L, 2L), .Label = c("similar", "compete"), class = "factor"), 
    value = c(0.7, 0.2, 0.4, 0.3, 0.8, 0.6)), row.names = c(NA, 
-6L), .Names = c("group", "variable", "value"), class = "data.frame") 

ggplot(mdf, aes (x=group, y=value, fill = variable)) + 
    geom_bar(stat="identity", position="dodge", alpha = 0.8) + 
    geom_bar(stat="identity", position="dodge", color = "#A9A9A9", alpha = 0.8) + 
    scale_fill_manual(values=c("#05f2ae", "#17b0c4")) + 
    geom_text(aes(x=group, y=value, ymax=value, label=value), 
      position=position_dodge(1), vjust=-1, size=12) + 
    coord_cartesian(ylim = c(0, 1)) 
    theme(plot.margin = unit(c(1,1,2,2), "cm"), 
     axis.text.x = element_text(vjust=0.5, size=20), 
     plot.title=element_text(size=20, vjust=2), 
     panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
     axis.title.x = element_blank(), axis.title.y = element_blank(), 
     panel.background = element_rect(fill = "#D9D9D9")) 

पर काम कर रहा हूँ मैं एक ही डिजाइन के साथ एक बहुत रेखांकन उत्पादन कर रहा हूँ और एक वस्तु में डिजाइन स्टोर करना चाहते हैं, की तरह है "plot_style", ताकि ग्राफ को शैली के साथ स्वचालित रूप से अपडेट किया जा सके, भले ही मैं इसे बाद में बदलने का फैसला करता हूं।

यदि मैं किसी वस्तु "x" में ggplot (...) के नीचे सबकुछ स्टोर करने का प्रयास करता हूं, तो मुझे एक त्रुटि मिलती है, Error: No layers in plot। एक ऑब्जेक्ट में ggplot (चर/चर से कम) के सभी तत्वों को स्टोर करने का बेहतर तरीका क्या है?

धन्यवाद।

+0

'? + .gg' देखें। उदाहरण के लिए, आप किसी ऑब्जेक्ट पर अपनी मूल साजिश असाइन कर सकते हैं, और फिर '% +%' का उपयोग कर अपने प्लॉट को किसी अन्य डेटा फ्रेम के साथ अपडेट कर सकते हैं। – Henrik

उत्तर

4

आप अनुकूलन की एक सूची बना सकते हैं और फिर प्रत्येक प्लॉट पर लागू कर सकते हैं। उदाहरण के लिए:

customPlot = list(
    theme(plot.margin = unit(c(1,1,2,2), "cm"), 
     axis.text.x = element_text(vjust=0.5, size=20), 
     plot.title=element_text(size=20, vjust=2), 
     panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
     axis.title.x = element_blank(), axis.title.y = element_blank(), 
     panel.background = element_rect(fill = "#D9D9D9")), 
    coord_cartesian(ylim = c(0, 1)), 
    scale_fill_manual(values=c("#05f2ae", "#17b0c4")) 
) 

ggplot(mdf, aes (x=group, y=value, fill = variable)) + 
    geom_bar(stat="identity", position="dodge", alpha = 0.8) + 
    geom_bar(stat="identity", position="dodge", color = "#A9A9A9", alpha = 0.8) + 
    geom_text(aes(x=group, y=value, ymax=value, label=value), 
      position=position_dodge(1), vjust=-1, size=12) + 
    customPlot 
+0

भयानक। बस मैं समझता हूं, आर अनिर्धारित मानों वाली सूची क्यों स्वीकार करता है, लेकिन किसी ऑब्जेक्ट के रूप में संग्रहीत नहीं होता है? यानी, अगर मैंने कस्टमप्लॉट में "सूची()" लागू नहीं किया है, लेकिन इसके बजाय इसे केवल <- के माध्यम से असाइन किया गया है, तो मुझे एक त्रुटि मिल गई होगी। – tom

+0

मेरे पास केवल 'ggplot' हुड के तहत "क्या कर रहा है, इसका प्राथमिक ज्ञान है, लेकिन मुझे लगता है कि ऐसा इसलिए है क्योंकि' ggplot' ऑब्जेक्ट्स पहले ही सूचियों के रूप में संग्रहीत हैं, और कुछ मामलों में यह सूची में संग्रहीत अनचाहे अभिव्यक्ति है। – eipi10

+0

वैसे, आप 'कस्टमप्लॉट' में 'geom_bar' और' geom_text' कॉल भी शामिल कर सकते हैं, तो आपको प्रत्येक प्लॉट को पूरा करने की आवश्यकता होगी 'ggplot (mdf, aes (x = group, y = value, fill = चर)) + कस्टमप्लॉट'। – eipi10

संबंधित मुद्दे