2012-07-02 14 views
11

scale_fill_gradient2 के लिए ऊपरी सीमाओं को बदलने से < 0 के रंगों के रंगों को भी प्रभावित किया जाता है क्योंकि 0 के आसपास रंग वितरण हमेशा समरूप रूप से प्रतीत होता है, क्या रंग मूल्यों के असममित वितरण को प्राप्त करने का कोई तरीका है?स्केल_gradient2 में असममित रंग वितरण?

यहाँ

एक साजिश geom_tile() का उपयोग करने का एक न्यूनतम उदाहरण:

data <- read.csv("http://protzkeule.de/data.csv") 
p <- ggplot(data=data, aes(x=variable, y=meas)) + geom_tile(aes(fill=value)) 

सममित सीमा के साथ साजिश:

p + scale_fill_gradient2(low="blue", mid="white", high="red", guide="colorbar", limits=c(-.1,.1)) 

लेकिन जब ऊपरी सीमा को बदलने, कम colormapping (colorbar घड़ी के रूप में अच्छी तरह से बदल जाता है):

p + scale_fill_gradient2(low="blue", mid="white", high="red", guide="colorbar", limits=c(-.1,.3)) 
+0

मैं गलत समझ जा सकता है कि तुम क्या कर रहे हैं ढूंढ रहे हैं, लेकिन 'midpoint = -0.1' को 'scale_fill_gradient2'' पर जाने का प्रयास करें। क्या तुम यही चाहते हो? – joran

+0

मेरा मतलब '0.1' था,' -0.1' स्पष्ट रूप से नहीं, लेकिन अब मैं सोच रहा हूं कि ब्रायन के जवाब के आधार पर आप वैसे भी नहीं खोज रहे थे। – joran

उत्तर

14

आप क्या चाहते हैं scale_fill_gradientn । तर्क बहुत स्पष्ट है, हालांकि नहीं कर रहे हैं (मुझे एक घंटे लग गए या तो अंत में इसे बाहर का हिस्सा लगाने की):

library("scales") 
p + scale_fill_gradientn(colours = c("blue","white","red"), 
         values = rescale(c(-.1,0,.3)), 
         guide = "colorbar", limits=c(-.1,.3)) 

कौन देता है:

enter image description here

+0

धन्यवाद, मुझे लगता है कि अब मुझे मिल गया है। अगर मैं गलत हूं लेकिन 'मूल्यों' के साथ मुझे सही करें, तो आप मानों को असाइन करते हैं कि 'रंग' वेक्टर से रंग मैप किया गया है? एकमात्र चीज जो मुझे नहीं मिलती है वह यह होता है कि यदि वेक्टर 'मूल्यों' में पास हो जाते हैं तो वेक्टर 'रंग' तक पारित होने से अधिक तत्व होते हैं। – Dahaniel

+0

'मूल्य' और 'रंगों' में समान लंबाई होनी चाहिए। वे प्रभावी ढंग से जोड़े जाते हैं, जहां मूल्य उस बिंदु पर रंग से मेल खाता है, और इसके बीच और अगले बिंदु के बीच सबकुछ अलग हो जाता है। मैं वास्तव में नहीं जानता कि क्या होगा यदि वे एक ही लंबाई नहीं थे; यह कम से कम अवधारणात्मक रूप से एक त्रुटि है, लेकिन मुझे नहीं पता कि एक वास्तविक त्रुटि फेंक दी गई है या नहीं। आपके उदाहरण में, -0.1 को नीले रंग में मैप किया गया है, 0.0 को सफेद पर मैप किया गया है, और 0.3 को लाल रंग में मैप किया गया है; -0.1 और 0.0 के बीच के मान नीले और सफेद के बीच interpolated हैं; 0.0 और 0.3 के बीच के मूल्य सफेद और लाल के बीच interpolated हैं। –

+0

@ ब्रायनडिग्स मैं आपके समाधान का एक समान तरीके से उपयोग कर रहा हूं लेकिन क्या पहले बार मूल्यों के लिए कलर बार को अलग-अलग प्रदर्शित करने का कोई तरीका है? जैसे [यहां सेपल लंबाई का उत्तर] (https://stackoverflow.com/questions/17713456/easiest-way-to-discretize-continuous-scales-for-ggplot2-color-scales) – guy