2013-02-05 6 views
15

मैं GGally फ़ंक्शन ggpairs के लिए रंग पैलेट को बदलना चाहता हूं। जब मैं getPlot का उपयोग करके ggplot को ggplot आदेश जोड़ने का प्रयास करता हूं, तो रंग नहीं बदलते हैं।ggplot का उपयोग कर GGally :: ggpairs के लिए रंग पैलेट बदलने का कोई तरीका है?

my_pair_plot = ggpairs(dataset, color="var1") 
getPlot(my_pair_plot,2,1) + scale_fill_brewer(palette = "Set2") 

ggplot एक त्रुटि में ggpairs परिणाम समारोह पर सीधे आदेश डाल करने के लिए प्रयास कर रहा है।

ggpairs(dataset, color="var1") + scale_fill_brewer(palette = "Set2") 

उत्तर

5

बाहर निकलता है, यह संभव है! इसे स्रोत कोड को देखने की आवश्यकता है, लेकिन समाधान बहुत आसानी से आता है। हम ggpairs समारोह में रुचि रखते हैं, तो पहला कदम सिर्फ

ggpairs 

हम किसी भी एईएस मानचित्रण भरने या रंग के लिए मिल सकता है देखते हैं है। दरअसल,

combo_aes <- addAndOverwriteAes(aes_string(x = xColName, 
      y = yColName, ...), section_aes) 

हम उम्मीद कर सकते हैं कि यह जो करता है वह करता है। दो महत्वपूर्ण सूचनाएं:

  • रंग और एईएस भरने ggpairs कॉल

  • aes_string()

प्रयोग किया जाता है के लिए अंडाकार में समाहित किया जाना चाहिए चलो इस बाहर कोशिश करते हैं:

ggpairs(diamonds[, 1:2], colour='cut') 

enter image description here

बढ़िया, हम लगभग वहाँ हैं! हमें सिर्फ रंग पैलेट को ओवरराइड करने की आवश्यकता है। ध्यान दें कि कुछ की तरह आप

ggpairs(diamonds[, 1:2], colour='cut') + scale_fill_brewer(palette = "Set2") 

प्रस्ताव काम नहीं करेगा क्योंकि ggpairs एक ggplot नहीं है आपत्ति है, तो + अंकन किसी भी तरह से सीधे लागू नहीं है। हालांकि, सरल कामकाज here प्रदान किया जाता है। भाग्य पर भरोसा रखें, और ...

ggplot <- function(...) ggplot2::ggplot(...) + scale_fill_brewer(palette="Set2") 
ggpairs(diamonds[, 1:2], colour='cut') 

enter image description here

+1

अच्छा हैक! उम्मीद है कि यह एक अच्छा समय के लिए भरोसेमंद रहता है। –

5

अद्यतन:

GGAlly फिर से अद्यतन किया गया था और इस जवाब में हैक भी अब और काम नहीं करता है, लेकिन अंत में वहाँ एक गैर है -hack समाधान: दी

scales <- scale_colour_brewer(type = 'qual') %+% scale_fill_brewer(type = 'qual') 

आप कर सकते हैं (एक उम्मीद है कि भविष्य प्रूफ तरीके से)

for (row in seq_len(ps$nrow)) 
    for (col in seq_len(ps$ncol)) 
     ps[row, col] <- ps[row, col] + scales 

पुराना तरीका

अन्य जवाब में हैक अब और काम नहीं करता है, तो चलो एक नया हैक करते हैं!, साजिश वस्तु में संबंधित तार संशोधित करना पड़

> dta <- data.frame(a=1:6, b=7:12, c=c('f', 'g')) 
> ps <- ggpairs(dta, 1:2, colour = 'c') 
> str(ps) 
List of 10 
$ data  :'data.frame': 2 obs. of 3 variables: 
    ..$ a: int [1:2] 1 2 
    ..$ b: int [1:2] 3 4 
    ..$ c: int [1:2] 5 6 
$ columns  : int [1:3] 1 2 3 
$ plots  :List of 9 
    ..$ : chr "ggally_densityDiag(ggally_data, ggplot2::aes(x = a, colour = c))" 
    ..$ : chr "ggally_cor(ggally_data, ggplot2::aes(x = b, y = a, colour = c))" 

[...] 

$ gg   : NULL 
- attr(*, "class")= chr [1:2] "gg" "ggpairs" 

> ps 

plot before

आदेश साजिश को संशोधित करने के लिए:

एक ggpairs वस्तु की आंतरिक संरचना डाटासेट और स्ट्रिंग की एक सूची है अतिरिक्त आदेश शामिल करने के लिए। इसके लिए हमें deparse(substitute(argument)) का उपयोग एक स्ट्रिंग कोड उपयोगकर्ता पारित कर दिया युक्त पाने के लिए, और हर साजिश कॉल से संलग्न:

add_to_plots <- function(pairs, modification) { 
    str <- deparse(substitute(modification)) 
    pairs$plots <- lapply(pairs$plots, function(s) paste(s, '+', str)) 
    pairs 
} 

> add_to_plots(ps, scale_colour_brewer(type = 'qual')) 

plot after

+0

यह अब और काम नहीं करता है। मैं विकर्ण में घनत्व वाले भूखंडों को भरना नहीं चाहता हूं लेकिन जैसा कि यहां दिखाया गया है - मैं यह कैसे कर सकता हूं? http://stackoverflow.com/questions/34727408/how-do-i-have-the-density-plot-not-filled-in-ggallyggpairs – Make42

+0

यह रंग बदलता है, लेकिन यह तथ्य नहीं कि मेरी साजिश अभी भी भर चुकी है। – Make42

+0

यह बहुत छोटा है, बस भरें ओवरराइट करें। –

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

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