2011-12-12 23 views
5

मैं एक साधारण बिखराव साजिशscatterplot - आधार आर साजिश

x<-rnorm(100) 
y<-rnorm(100) 
z<-rnorm(100) 

मैं plot(x,y) प्लॉट करने के लिए चाहते हैं, लेकिन अंक के रंग रंग होना चाहिए z के आधार पर कोड किया है।

इसके अलावा, मैं परिभाषित करने की क्षमता रखना चाहता हूं कि कितने समूह (और इस प्रकार रंग) z होना चाहिए। और यह समूह आउटलेटर्स के लिए प्रतिरोधी होना चाहिए (शायद z घनत्व को n बराबर घनत्व समूहों में विभाजित करें)।

अभी तक मैं इसे मैन्युअल रूप से करता हूं, क्या यह स्वचालित रूप से ऐसा करने का कोई तरीका है?

नोट: मैं इसे बेस आर के साथ ggplot के साथ नहीं करना चाहता हूं।

उत्तर

11

आप col पैरामीटर पर रंगों का वेक्टर पास कर सकते हैं, इसलिए यह आपके z समूहों को इस तरह से परिभाषित करने का विषय है जो आपके आवेदन के लिए समझ में आता है। आधार पर cut() फ़ंक्शन, या cut2() हैमिस्क में जो थोड़ा अधिक लचीलापन प्रदान करता है। उचित रंग पैलेट चुनने में सहायता के लिए, RColorBrewer पैकेज अमूल्य है। यहाँ x,y,z को परिभाषित करने के बाद एक त्वरित उदाहरण है:

z.cols <- cut(z, 3, labels = c("pink", "green", "yellow")) 
plot(x,y, col = as.character(z.cols), pch = 16) 

enter image description here

आप स्पष्ट रूप से एक legend मैन्युअल रूप से जोड़ सकते हैं। दुर्भाग्य से, मुझे नहीं लगता कि सभी प्रकार के भूखंड col तर्क के लिए वैक्टर स्वीकार करते हैं, लेकिन type = "p" स्पष्ट रूप से काम करता है। उदाहरण के लिए, plot(x,y, type = "l", col = as.character(z.cols)) मेरे लिए एक रंग के रूप में आता है। इन भूखंडों के लिए, आप lines() या segments() के साथ अलग-अलग रंग जोड़ सकते हैं या जो भी निम्न स्तरीय प्लॉटिंग कमांड का उपयोग करने की आवश्यकता है वह है। बेस ग्राफिक्स here में type = "l" प्लॉट के साथ ऐसा करने के लिए @Andrie द्वारा इसका उत्तर देखें।

+0

क्या कट() समान सामग्री अंतराल में विभाजित होता है? – ECII

+0

@ECII - डिफ़ॉल्ट रूप से नहीं। 'Hmisc ::: cut2()' 'm' तर्क प्रदान करता है जो प्रत्येक समूह में कम से कम अवलोकनों को सेट करता है, हालांकि यह आसान बनाता है। कुछ 'z.cols2 <- cut2 (z, m = length (z)/3) की तरह कुछ चाल चलाना चाहिए। – Chase

+0

कट 2 में जी तर्क बेहतर नहीं होना चाहिए? कट 2 (जेड, जी = 3)? – ECII

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