2012-12-15 30 views
17

मैं डेटासेट में डेटा मानों की सीमा के बावजूद, दो मानों के बीच एक रंग ढाल को खींचने और किंवदंती लेबल करने का एक तरीका ढूंढ रहा हूं। अनिवार्य रूप से, रंग ग्रेडियेंट्स के लिए ylim() के बराबर एक कार्यात्मक है?डेटा रेंज के बाहर रेंज के लिए ggplot स्केल रंग ढाल

को देखते हुए कोड है जो az मूल्य -1 और 1 के बीच आम तौर पर भूखंडों, मैं साजिश और एक ढाल लेबल अगर टूटता डेटा सीमा के भीतर हैं कर सकते हैं:

require(ggplot2) 

#generator from http://docs.ggplot2.org/current/geom_tile.html 
pp <- function (n,r=4) { 
    x <- seq(-r*pi, r*pi, len=n) 
    df <- expand.grid(x=x, y=x) 
    df$r <- sqrt(df$x^2 + df$y^2) 
    df$z <- cos(df$r^2)*exp(-df$r/6) 
    df 
} 

t <- pp(30) 
summary(t) 
b <- c(-.5,0,.5) 
p <- ggplot(data=t,aes(x=x,y=y))+ 
    geom_tile(aes(fill=z))+ 
    scale_fill_gradientn(colours=c("navyblue","darkmagenta","darkorange1"),breaks=b,labels=format(b)) 
try(ggsave(plot=p,filename=<somefile.png>,height=3,width=4)) 

graham jeffries ggplot scale fill example

लेकिन जब मैं बदल मनाई गई सीमा के बाहर मूल्यों को तोड़ता है, ढाल रंग समायोजित प्रतीत नहीं होता है और ढाल लेबल प्रकट नहीं होते हैं।

b <- c(-3,0,3) 

graham jeffries ggplot scale fill example 2

उत्तर

37

यह याद रखना महत्वपूर्ण है कि ggplot में, breaks मूल रूप से पैमाने खुद कभी नहीं बदलेगा बहुत महत्वपूर्ण है। यह केवल गाइड या किंवदंती में प्रदर्शित होने वाली चीज़ों को बदल देगा।

आप पैमाने की सीमा के बजाय बदल रहा है किया जाना चाहिए:

ggplot(data=t, aes(x=x, y=y)) + 
    geom_tile(aes(fill=z)) + 
    scale_fill_gradientn(limits = c(-3,3), 
    colours=c("navyblue", "darkmagenta", "darkorange1"), 
    breaks=b, labels=format(b)) 

और अब अगर आप टूट जाता है कि कथा में दिखाई देते हैं और आगे का विस्तार करना चाहते हैं, तो आप उन्हें बदल सेट करने के लिए जहां टिक के निशान दिखाई दे सकता है।

ध्यान में रखने के लिए एक अच्छा सादृश्य हमेशा नियमित एक्स और वाई अक्ष है। "ब्रेक" सेट करना वहां टिक बदलता है जहां टिक चिह्न दिखाई देते हैं। यदि आप x या y axes के सीमा को बदलना चाहते हैं, तो आप आमतौर पर उनकी "सीमाएं" जैसी सेटिंग बदल देंगे।

+0

मुझे लगता है कि मैं कुछ समान हासिल करने की कोशिश कर रहा हूं, लेकिन इस समाधान के साथ विफल रहा हूं। मेरे पास कई डेटासेट हैं जहां मान सीमित श्रेणियों में हैं, लेकिन सैद्धांतिक रूप से वे 0 और -100 (डीबी) के बीच हो सकते हैं। scale_fill_gradient (कम = "सफेद", उच्च = "लाल") ठीक है, लेकिन मुझे दृष्टि से डेटासेट की तुलना करने की अनुमति नहीं देता है। scale_fill_gradient (कम = "सफेद", उच्च = "लाल", सीमा = सी (0, -100), गाइड = "किंवदंती", सीमा = सी (0, -100), ब्रेक = बी, लेबल = प्रारूप (सी (0, -100)) किंवदंती का उत्पादन नहीं करता है। मुझे नुकसान हुआ है। – MartinT