2011-05-30 24 views
7

चेतावनी में एक और अधिक निरंतर रंग पैलेट बनाने .... बहुत नौसिखिया सवाल इस प्रकार है:आर, ggplot2, जाली, या latticeExtra

मैं कई हजार (एक्स, वाई) अंक की एक काफी नियमित वितरण साजिश कोशिश कर रहा हूँ प्रत्येक एक मूल्य से जुड़ा हुआ है, चलिए जेड को कॉल करते हैं, जो -20 से +20 के बीच बहुत अनियमित रूप से भिन्न होता है। मुझे चिकनाई में दिलचस्पी नहीं है; मैं बिंदु जेड वैल्यू को आसानी से बदलते रंग पैलेट के अनुसार साजिश करना चाहता हूं जैसे ग्नुपलॉट उचित चिकनी रंग पैलेट के साथ कर सकता है। मैं आधार आर, ggplot2, और latticeExtra की कोशिश की है, और जैसा कि सबसे अच्छा मैं, मैं जिसके बाद लगभग करता है जो मैं चाहता के साथ आ सकते हैं कर सकते हैं: 1,302,525 225,167 -3.5

:

library(lattice) 
library(latticeExtra) 
library(colorRamps) 
df = read.table(file"whatever", header=T) 
levelplot(Z~X*Y, df, panel=panel.levelplot.points, cex=0.2, 
    col.regions=colorRampPalette(c("red","white","blue"))(50)) 

एक डेटा बिंदु की तरह दिखता है

जब मैं अंतिम कोड लाइन में "50" के साथ अपना डेटाफ्रेम प्लॉट करता हूं, तो मुझे 16 वें रंग बार सेगमेंट सफेद के साथ लाल, सफेद और नीले रंग के रंगों की अनुमानित आर रीसायकल व्यवहार मिलता है। 3 से 7 को बदलना लाल और नीले रंग के दो रंगों को दोहराए जाने वाले कलर रेंज सेगमेंट का कारण बनता है, जिसमें रंगीन रेंज रीसायकल करने की कोशिश करती है। इससे पता चलता है कि इस संख्या को रंगों के बेहतर स्नातक होने का कारण बनता है। लेकिन अगर मैं 16 से अधिक संख्या में डालता हूं, तो मुझे बस 16 रंगीन सेगमेंट मिलते हैं, समान रूप से लाल, सफेद से नीले रंग में बदलते हैं। लेकिन मुझे कलर स्केल भी बेहतर लगेगा, और एक परिपूर्ण दुनिया में, सफेद रंग होने के लिए शून्य का ज़ेड मजबूर करें।

आर के साथ मेरा अनुभव अब तक है जब मैं इस तरह से कुछ आसान नहीं कर सकता, मुझे एक बहुत ही मौलिक अवधारणा याद आ रही है। यह क्या है?

उत्तर

7

क्या आपने ggplot में scale_gradient देखा है? या scale_brewer असतत रंगों के लिए? यहाँ scale_gradient

dat <- data.frame(x = rnorm(1000), y = rnorm(1000), z = sample(-20:20, 1000, TRUE)) 

p <- ggplot(dat, aes(x, y, colour = z)) + geom_point() 
p + scale_colour_gradient() 
p + scale_colour_gradient(low = "red", high = "blue") 
p + scale_colour_gradient2(low = "red", mid = "white", high = "blue") 
+0

धन्यवाद धक्का के लिए चेस इस दिशा है। – Plsvn

11

का एक उदाहरण के लिए, आप अपने रंग RColorBrewer (या यहां तक ​​colorspace) के साथ पैलेट की स्थापना कर सकते हैं जहां तक ​​जाली संबंध है। @Chase द्वारा प्रदान उदाहरण का उपयोग, लेकिन z के लिए सकारात्मक मूल्य के साथ:

dat <- data.frame(x = rnorm(1000), y = rnorm(1000), z = sample(0:40, 1000, TRUE)) 
library(RColorBrewer) 
# see, e.g. 
# display.brewer.all(9, type="seq") 
# display.brewer.pal(11, "RdBu") 
my.col <- colorRampPalette(brewer.pal(11, "RdBu"))(diff(range(dat$z))) 
xyplot(y ~ x, data=dat, col=my.col[dat$z], pch=19, alpha=.5) 

ध्यान दें कि यह भी प्रक्षेप द्वारा उपलब्ध रंग की सीमा को बढ़ाने के लिए यहां आवश्यक है। इसके अलावा, levelplot() के साथ, आप cut= और pretty= के साथ खेलना चाहेंगे।

enter image description here

6

"की अवधारणा" आप याद कर रहे हैं levelplot() करने के लिए at तर्क जो रंग के स्तर और/या समोच्च पंक्तियों के बीच breakpoints को परिभाषित करता है। डिफ़ॉल्ट pretty(z) है जिसके परिणामस्वरूप केवल कुछ स्तर होते हैं। आप at को अपने इच्छित मानों की श्रेणी को कवर करने के अनुक्रम के लिए सेट कर सकते हैं।

library(latticeExtra) 

dat <- data.frame(x = rnorm(1000), y = rnorm(1000), z = rnorm(1000, mean = 1)) 
## for centering the colour key around zero 
maxz <- max(abs(dat$z)) 

levelplot(z ~ x * y, dat, at = seq(-maxz, maxz, length = 100), 
    panel = panel.levelplot.points, par.settings = custom.theme.2()) 
संबंधित मुद्दे