2015-09-12 7 views
7

के साथ संयोजन में एईएस() के साथ डॉलर संकेत नोटेशन के साथ परिवर्तनीय गुजरते समय समस्या मैं एक परियोजना के लिए इस समय ggplot2 में कुछ विश्लेषण कर रहा हूं और मौके से मैं कुछ (मेरे लिए) अजीब व्यवहार जो मैं समझा नहीं सकता। जब मैं aes(x = cyl, ...) लिखता हूं तो साजिश aes(x = mtcars$cyl, ...) का उपयोग करके एक ही वैरिएबल पास करने पर यह अलग-अलग दिखती है। जब मैं facet_grid(am ~ .) हटा देता हूं तो दोनों ग्राफ एक ही होते हैं। नीचे दिए गए कोड अपने प्रोजेक्ट में कोड है कि एक ही व्यवहार उत्पन्न करता है के बाद मॉडलिंग की है: graph 1 - dollar sign notationfacet_grid() या facet_wrap()

यहाँ ग्राफ 2 की तस्वीर है:: graph 2 - no dollar sign notation

library(dplyr) 
library(ggplot2) 

data = mtcars 

test.data = data %>% 
    select(-hp) 


ggplot(test.data, aes(x = test.data$cyl, y = mpg)) + 
    geom_point() + 
    facet_grid(am ~ .) + 
    labs(title="graph 1 - dollar sign notation") 

ggplot(test.data, aes(x = cyl, y = mpg)) + 
    geom_point()+ 
    facet_grid(am ~ .) + 
    labs(title="graph 2 - no dollar sign notation") 

यहाँ ग्राफ 1 की तस्वीर है

मुझे पता चला कि मैं के बजाय aes_string का उपयोग करके इस समस्या के आसपास काम कर सकता हूं और चर नामों को तारों के रूप में पास कर सकता हूं, लेकिन मैं समझना चाहूंगा कि ggplot इस तरह से क्यों व्यवहार कर रहा है। समस्या facet_wrap के साथ समान प्रयासों में भी होती है।

Thx अग्रिम में किसी भी मदद के लिए बहुत कुछ! मैं बहुत असहज महसूस करता है, तो मुझे लगता है कि ठीक से ...

+9

संक्षिप्त उत्तर है: * * 'एईएस में $'() ' – baptiste

+0

^_^सदमे मैं आज मिल गया जब मेरी ग्राफ अचानक सब अजीब लग रहा था के बाद, मैं यह काम नहीं चलेगा का उपयोग कभी नहीं' फिर से। फिर भी मैं समझना चाहता हूं कि क्या हो रहा है, क्योंकि मुझे इससे पहले कभी इस समस्या/व्यवहार का सामना नहीं हुआ। – Christoph

+1

जब ggplot साजिश बनाता है, यदि प्रत्येक परत के लिए डेटासेट्स को समूह में विभाजित करता है, जो सौंदर्यशास्त्र और पहलू द्वारा परिभाषित किया जाता है।इस समूह को भरोसेमंद होने के लिए, आपको एक ही डेटा.फ्रेम से उत्पन्न होने वाले चर की आवश्यकता होती है, अन्यथा ggplot फ़ेसटिंग कारक और शेष मैपिंग के लिए एक अलग क्रम का उपयोग कर समाप्त हो सकता है। – baptiste

उत्तर

23

tl समझ में नहीं आता, डॉ

कभी उपयोग [ या $aes() अंदर।


इस निदर्शी उदाहरण पर विचार करें जहां Facetting चर fx

d <- data.frame(x=1:10, f=rev(letters[gl(2,5)])) 

के संबंध में एक गैर स्पष्ट क्रम में जानबूझकर है अब विपरीत क्या इन दो भूखंडों के साथ होता है,

p1 <- ggplot(d) + 
    facet_grid(.~f, labeller = label_both) + 
    geom_text(aes(x, y=0, label=x, colour=f)) + 
    ggtitle("good mapping") 

p2 <- ggplot(d) + 
    facet_grid(.~f, labeller = label_both) + 
    geom_text(aes(d$x, y=0, label=x, colour=f)) + 
    ggtitle("$ corruption") 

enter image description here

हम क्या प्रत्येक पैनल के लिए ggplot2 द्वारा आंतरिक रूप से बनाई गई data.frame को देखकर हो रहा है का एक बेहतर विचार प्राप्त कर सकते हैं,

ggplot_build(p1)[["data"]][[1]][,c("x","PANEL")] 

    x PANEL 
1 6  1 
2 7  1 
3 8  1 
4 9  1 
5 10  1 
6 1  2 
7 2  2 
8 3  2 
9 4  2 
10 5  2 

ggplot_build(p2)[["data"]][[1]][,c("x", "PANEL")] 

    x PANEL 
1 1  1 
2 2  1 
3 3  1 
4 4  1 
5 5  1 
6 6  2 
7 7  2 
8 8  2 
9 9  2 
10 10  2 

दूसरा भूखंड गलत मानचित्रण है, क्योंकि जब ggplot प्रत्येक के लिए एक data.frame बनाता है पैनल, यह "गलत" क्रम में एक्स मानों को चुनता है।

ऐसा इसलिए होता है क्योंकि $ का उपयोग मैप किए जाने वाले विभिन्न चर के बीच का लिंक तोड़ता है (ggplot को यह मानना ​​चाहिए कि यह एक स्वतंत्र चर है, जो इसे जानता है कि मनमाने ढंग से, डिस्कनेक्ट स्रोत से आ सकता है)। चूंकि इस उदाहरण में डेटा.फ्रेम को f कारक के अनुसार आदेश नहीं दिया गया है, इसलिए प्रत्येक पैनल के लिए आंतरिक रूप से उपयोग किए जाने वाले सबसेट डेटा.फ्रेम गलत ऑर्डर मानते हैं।

+0

आपकी मदद के लिए बहुत बहुत धन्यवाद! आपका उदाहरण कमाल है! – Christoph

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