2010-02-23 2 views
14

В maptplotlib можно создать представление тепловой карты корреляционной матрицы, используя функцию imshow. По определению такая матрица симметрична вокруг своей главной диагонали, поэтому нет необходимости представлять как верхний, так и нижний треугольники. Например: correlation matrixПостроение только верхнего/нижнего треугольника тепловой карты

Приведенный выше пример был взят из this site К сожалению, я не мог понять, как это сделать в Matplotlib. Установка верхней/нижней части матрицы на None приводит к черному треугольнику. Я гугле на «Matplotlib пропущенные значения», но не смогли найти ничего полезного

+1

Может быть, они просто фотошоп это :) – endolith

ответ

16

Проблема с ответом, предоставленным doug, заключается в том, что он полагается на то, что colormap отображает нулевые значения в белый цвет. Это означает, что цветовые карты, которые не включают белый цвет, не являются полезными. Ключом для решения является функция cm.set_bad. Вы маскируете ненужные части матрицы с помощью None или с масками в масках 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', и для этого я и нуждался в этом решении. Также обратите внимание, чтобы исключить диагональ, а также изменить 'k = -1' на' k = 0' в строке 'mask = NP.tri (A.shape [0], 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 онлайн документа для макияжа.

Смежные вопросы