2016-07-24 2 views
6

मैं संख्या मैट्रिस को रंग मैट्रिस में परिवर्तित करने की प्रक्रिया में हूं; हालांकि, रंग सही ढंग से प्रदर्शित नहीं हो रहे हैं, उदाहरण के लिए, रंग मैट्रिक्स संख्या मैट्रिक्स में निर्दिष्ट संख्या के सापेक्ष गलत रंग प्रदर्शित करता है।आर (मैट्रिस या अन्यथा में) में रंगों में सही रूप से कनवर्ट करना

मैंने पहले संख्यात्मक मानों के सेट पर रंग असाइन किए।

cols <- c(
'0' = "#FFFFFF", 
'1' = "#9AFC7F", 
'2' = "#77F255", 
'3' = "#60DF3D", 
'4' = "#49C925", 
'5' = "#37B215", 
'6' = "#219900" 
) 

फिर कुछ मैट्रिक्स उत्पन्न किए।

Map1 <- read.table(text=" 
1 1 1 0 0 1 1 0 2 1 
1 1 1 1 0 1 1 1 2 1 
0 1 1 0 2 2 1 1 1 1 
0 1 1 1 1 1 2 1 2 2 
1 1 2 1 1 1 1 1 2 2 
1 1 1 1 1 2 2 1 2 2 
1 2 0 1 1 2 1 2 1 2 
0 2 2 0 1 1 1 1 1 1 
0 1 1 0 0 1 2 2 1 0 
0 1 1 1 1 1 1 1 1 0 
") 

Map2 <- read.table(text=" 
1 2 1 1 1 1 1 0 2 1 
1 1 1 1 1 1 1 1 1 1 
0 2 1 1 1 2 1 1 1 1 
0 0 1 2 2 1 2 2 3 2 
0 1 2 2 1 1 2 2 2 2 
1 1 0 2 1 1 3 2 3 3 
1 1 2 2 1 2 2 2 1 2 
0 1 2 2 1 2 2 2 1 2 
1 1 2 1 1 1 1 2 1 1 
1 1 1 1 1 1 1 1 1 1 
") 

मैट्रिक्स की साजिश के बाद, मुझे लगता है कि रंग उस मूल्य के साथ मेल नहीं खाते हैं जो उन्हें सौंपा जाना चाहिए था।

image(1:nrow(Map1), 1:ncol(Map1), t(apply(Map1, 2, rev)), col=cols, xaxt='n', yaxt='n', ann=FALSE, bty='n', asp = 1) 

image(1:nrow(Map2), 1:ncol(Map2), t(apply(Map2, 2, rev)), col=cols, xaxt='n', yaxt='n', ann=FALSE, bty='n', asp = 1) 

Map 1

Map 2

मैं क्यों संख्या और रंग संरेखित नहीं कर रहे हैं पता लगाने की कोशिश स्टम्प्ड किया गया है। cols में निर्दिष्ट संख्याओं को प्लॉट करने से सही अनुक्रम उत्पन्न होता है।

d <- read.table(text="0 1 2 3 4 5 6") 
image(1:nrow(d), 1:ncol(d), t(apply(d, 2, rev)), col=cols, xaxt='n', yaxt='n', ann=FALSE, bty='n', asp = 1) 

Color Sequence

वहाँ पहले नंबर मैट्रिक्स में किसी भी 6 मान नहीं हैं, इसलिए वहाँ पहले रंग मैट्रिक्स में किसी भी अंधेरे वर्गों नहीं होना चाहिए। ऐसा प्रतीत होता है कि 2 के मानों को पहले मैट्रिक्स में 6 पर दिया गया रंग दिया गया है, और 3 से 6 दूसरे में दिया गया है।

पहले नंबर मैट्रिक्स में एक 3 जोड़ना, मैट्रिक्स में सबसे बड़ी संख्या में गहरे रंग वाले असाइन किया गया है, बल्कि रंग यह cols में सौंपा गया था की तुलना में रंग पैमाने, अर्थात् नीचे अन्य मूल्यों शिफ्ट करने के लिए लगता है।

Map1.2 <- read.table(text=" 
1 1 1 0 0 1 1 0 2 1 
1 1 1 1 0 1 1 1 2 1 
3 1 1 0 2 2 1 1 1 1 
0 1 1 1 1 1 2 1 2 2 
1 1 2 1 1 1 1 1 2 2 
1 1 1 1 1 2 2 1 2 2 
1 2 0 1 1 2 1 2 1 2 
0 2 2 0 1 1 1 1 1 1 
0 1 1 0 0 1 2 2 1 0 
0 1 1 1 1 1 1 1 1 0 
") 

image(1:nrow(Map1), 1:ncol(Map1), t(apply(Map1, 2, rev)), col=cols, xaxt='n', yaxt='n', ann=FALSE, bty='n', asp = 1) 
image(1:nrow(Map1.2), 1:ncol(Map1.2), t(apply(Map1.2, 2, rev)), col=cols, xaxt='n', yaxt='n', ann=FALSE, bty='n', asp = 1) 

Map 1 containing a matrix of <code>0</code> <code>1</code> and <code>2</code>

Map 1 containing a matrix of <code>0</code> <code>1</code> <code>2</code> and <code>3</code>

संख्या मैट्रिक्स जो इन दो रंग मैट्रिक्स उत्पन्न के बीच फर्क सिर्फ इतना है पहले कॉलम में 0 है, तीसरी पंक्ति एक 3 में बदल गया था।

+0

अच्छा सवाल है, लेकिन (1) क्या आप कृपया डेटा शामिल कर सकते हैं जो हमें एक [पुनरुत्पादित उदाहरण] प्रदान करेगा (http://stackoverflow.com/questions/5963269/how-to-make-a-great- आर-पुनरुत्पादित उदाहरण)? (2) आपको पता होना चाहिए कि कोड स्निपेट आर कोड के लिए कुछ भी उपयोगी नहीं करते हैं - कोड ब्लॉक के लिए इंडेंटेशन का उपयोग करने के लिए सबसे अच्छा –

+0

समस्या को पुन: उत्पन्न करने के लिए आवश्यक सभी डेटा प्रश्न में होना चाहिए। एकमात्र डेटा संख्या matrices हैं, और मैं उपयोग किया जाने वाला एकमात्र कोड यहां पृष्ठ पर है। – Cameron

+2

संख्या मैट्रिक्स (भी, (बहुत) छोटे मैट्रिक्स समस्या उत्पन्न होने के लिए साथ काम करने के आसान होगा?) से उत्पन्न होने के लिए एक विशेष रूप से सुविधाजनक स्वरूप में नहीं हैं ... –

उत्तर

3

समस्या, जैसा कि आप ने कहा कि रंग मैट्रिक्स में मानों द्वारा निर्धारित किया जा रहा है। ऐसा इसलिए है क्योंकि image() स्वचालित रूप से प्रदान किए गए रंगों की श्रृंखला में मैट्रिक्स में मानों को फैलाता है। जैसा कि आप चाहते थे उन्हें फैलाने के लिए, आपको अपने वेक्टर की लंबाई को कवर करने के लिए zlim तर्क सेट करने की आवश्यकता है। इसके बारे में अधिक जानकारी के लिए सहायता पृष्ठ (?image) पर एक नज़र डालें।

तो, अपनी छवि को दूर करने के लिए, आप निम्न कर सकते हैं:

cols <- c("#FFFFFF", "#9AFC7F", "#77F255", "#60DF3D", "#49C925", "#37B215", "#219900") 
set.seed(123) 
d <- as.data.frame(matrix(sample(c(0, 1, 5, 6), 20, replace = TRUE), ncol = 4)) 
image(1:ncol(d), 1:nrow(d), t(sapply(d, rev)), 
    zlim = c(0, length(cols) - 1), 
    col = cols, xaxt='n', yaxt='n', ann=FALSE, bty='n', asp = 1) 

enter image description here

कुछ साइड नोट:

cols <- c("#FFFFFF", "#9AFC7F", "#77F255", "#60DF3D", "#49C925", "#37B215", "#219900") 

Map1 <- read.table(text=" 
    1 1 1 0 0 1 1 0 2 1 
    1 1 1 1 0 1 1 1 2 1 
    0 1 1 0 2 2 1 1 1 1 
    0 1 1 1 1 1 2 1 2 2 
    1 1 2 1 1 1 1 1 2 2 
    1 1 1 1 1 2 2 1 2 2 
    1 2 0 1 1 2 1 2 1 2 
    0 2 2 0 1 1 1 1 1 1 
    0 1 1 0 0 1 2 2 1 0 
    0 1 1 1 1 1 1 1 1 0 
") 

image(1:ncol(Map1), 1:nrow(Map1), t(sapply(Map1, rev)), 
    zlim = c(0, length(cols) - 1), # This will spread you numbers properly 
    col = cols, xaxt='n', yaxt='n', ann=FALSE, bty='n', asp = 1) 

enter image description here

यहाँ एक और उदाहरण है

  • रंग वेक्टर (cols) के नाम की आवश्यकता नहीं है। आदेश पर्याप्त है।
  • यदि आप 0 के बजाय 1 से शुरू होने वाले डेटा का उपयोग करते हैं, तो zlim = c(1, length(cols)) पर सेट करें।
  • मैं sapply(Map1, rev) साथ apply(Map1, 2, rev) छोटा।
  • मैं 1:ncol() और 1:nrow() बदली, के रूप में मूल आदेश एक आयताकार मेज के साथ काम नहीं किया।
6

मुझे लगता है कि आपको संख्याओं के लिए मैपिंग के साथ समस्या हो रही है। यदि x संख्यात्मक है तो cols[x] नाम से नहीं, वेक्टर द्वारा संदर्भित किया जाएगा ...

मूल्यों को थोड़ा और स्पष्ट बनाने के लिए मैंने पहला रंग लाल (सफेद के बजाय) बदल दिया।

cols <- c('0' = "#FF0000",'1' = "#9AFC7F",'2' = "#77F255",'3' = "#60DF3D", 
    '4' = "#49C925",'5' = "#37B215",'6' = "#219900") 

चेक रंग परिभाषाएँ:

plot(0:6,rep(1,7),col=cols,pch=16,cex=5,ylim=c(0.9,1.1), 
    axes=FALSE,ann=FALSE,mar=c(0,0,0,0)) 

enter image description here

m <- matrix(0:5,ncol=2) 
image(m,col=cols[m]) ## index by number 

enter image description here

अब नाम से सूचकांक:

image(m,col=cols[as.character(m)]) 

enter image description here

+0

मैं सफलतापूर्वक मेरी समस्या के लिए इस समाधान को लागू करने में कठिनाई आ रही है; हालांकि, मेरे प्रयासों में - और मूल प्रश्न को संपादित करने के बाद इसे अधिक प्रतिलिपि बनाने और संक्षेप में बनाने के लिए - मुझे लगता है कि समस्या यह है कि रंग मैट्रिक्स मूल्य मैट्रिक्स में मूल्य मैट्रिक्स में सबसे अधिक मूल्य को मूल्य के बजाय सबसे अधिक रंग असाइन कर रहा है 'कोल्स' में मैंने स्पष्टता के लिए मूल प्रश्न के नीचे विवरण और नई छवियां जोड़ दीं। – Cameron

+0

यदि आपको लगता है कि आपने अपना प्रश्न हल कर लिया है, तो आगे बढ़ें और समाधान को उत्तर के रूप में पोस्ट करें (जैसे ही आपको अनुमति है) –

+0

मैंने प्रश्न का समाधान नहीं किया है; मूल प्रश्न के अतिरिक्त मेरा एक ऐसा त्रुटि है जिसे मैंने पहले नहीं देखा था जो मेरे पास होने वाले मुद्दे को हल करने में मूल्यवान हो सकता है। मैं अभी भी समस्या को ठीक करने में असमर्थ हूं। – Cameron

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