2010-02-23 13 views
14

मैप्प्लोट्लिब में, कोई इम्शो फ़ंक्शन का उपयोग करके सहसंबंध मैट्रिक्स का एक तापमैप प्रतिनिधित्व बना सकता है। परिभाषा के अनुसार, इस तरह का एक मैट्रिक्स अपने मुख्य विकर्ण के चारों ओर सममित है, इसलिए ऊपरी और निचले त्रिकोण दोनों को प्रस्तुत करने की आवश्यकता नहीं है। उदाहरण के लिए: correlation matrixएक हीटमैप के केवल ऊपरी/निचले त्रिकोण को प्लॉट करना

ऊपर के उदाहरण this site दुर्भाग्य से लिया गया है, मैं कैसे matplotlib में ऐसा करने को समझ नहीं सकता है। मैट्रिक्स के ऊपरी/निचले भाग को सेट करने के लिए काले त्रिकोण में कोई भी परिणाम नहीं है। मैं के लिए "matplotlib मान अनुपलब्ध" googled है, लेकिन उपयोगी

+1

शायद वे इसे फ़ोटोशॉप कर चुके हैं :) – endolith

उत्तर

16

डॉउग द्वारा प्रदान किए गए उत्तर के साथ समस्या यह है कि यह इस तथ्य पर निर्भर करता है कि colormap शून्य मानों को शून्य मानता है। इसका मतलब है कि रंगीन रंग जिनमें सफेद रंग शामिल नहीं है, उपयोगी नहीं हैं। समाधान के लिए कुंजी cm.set_bad फ़ंक्शन है। आप मैट्रिक्स के अनियंत्रित हिस्सों को किसी के साथ या डिफ़ॉल्ट ब्लैक के बजाय, NumPy मुखौटा सरणी और set_bad सफेद के साथ मुखौटा करते हैं।

import numpy as NP 
from matplotlib import pyplot as PLT 
from matplotlib import cm as CM 

A = NP.random.randint(10, 100, 100).reshape(10, 10) 
mask = NP.tri(A.shape[0], k=-1) 
A = NP.ma.array(A, mask=mask) # mask out the lower triangle 
fig = PLT.figure() 
ax1 = fig.add_subplot(111) 
cmap = CM.get_cmap('jet', 10) # jet doesn't have white color 
cmap.set_bad('w') # default value is 'k' 
ax1.imshow(A, interpolation="nearest", cmap=cmap) 
ax1.grid(True) 
PLT.show() 
+0

अच्छा! 'pcolormesh' के साथ भी काम करता है, जो मुझे इस समाधान की आवश्यकता है। रेखा 'मास्क = एनपी.tri (एशिप [0], के = 0) में विकर्ण को बाहर करने के लिए' k = -1' से 'k = 0' को बदलने के लिए भी ध्यान दें। – Vlox

7
import numpy as NP 
from matplotlib import pyplot as PLT 
from matplotlib import cm as CM 

A = NP.random.randint(10, 100, 100).reshape(10, 10) 
# create an upper triangular 'matrix' from A 
A2 = NP.triu(A) 
fig = PLT.figure() 
ax1 = fig.add_subplot(111) 
# use dir(matplotlib.cm) to get a list of the installed colormaps 
# the "_r" means "reversed" and accounts for why zero values are plotted as white 
cmap = CM.get_cmap('gray_r', 10) 
ax1.imshow(A2, interpolation="nearest", cmap=cmap) 
ax1.grid(True) 
PLT.show() 

plot http://img444.imageshack.us/img444/9585/cmapgrayr.png

+1

आपके आयात को शामिल करने के लिए धन्यवाद। चलने योग्य उदाहरण बहुत उपयोगी हैं। – jcdyer

2

कुछ भी आप ऊपरी/निचले हिस्से पारदर्शी के साथ एक सफेद मैट्रिक्स से अधिक साजिश सकता है नहीं पा सके

a =random((10,10)) 
imshow(a, interpolation='nearest') 

b = ones(a.shape+(4,)) # «white» matrix with alpha=1 
for i in range(a.shape[0]): 
    for j in range(i, a.shape[1]): 
     b[i,j,3] = 0 # upper triangle, alpha = 0 
imshow(b, interpolation='nearest') 

upper/lower triangle of a heatmap http://lh5.ggpht.com/_ZgVr3-a-Z00/S4P3_BWByKI/AAAAAAAAAXE/UsJpokz6LKE/pp.png

0

seaborn और numpy के साथ, एक त्वरित समाधान है:

import matplotlib.pyplot as plt 
import seabon as sns 

# Say your matrix object (e.g. np.array) is corr_mat 

# Get the upper triangle without the diagonal 
corr_mat = np.triu(corr_mat, k=1) 

# Plot the heatmap 
ax = sns.heatmap(corr_mat) 

कृपया, श्रृंगार के लिए seaborn ऑनलाइन दस्तावेज़ देखें डौग उदाहरण अपनाने हम निम्नलिखित मिलता है।

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