Построение только верхнего/нижнего треугольника тепловой карты
В maptplotlib можно создать представление тепловой карты корреляционной матрицы, используя функцию imshow. По определению, такая матрица симметрична относительно своей главной диагонали, поэтому нет необходимости представлять как верхний, так и нижний треугольники. Например: ![correlation matrix]()
Приведенный выше пример был взят с этого сайта. К сожалению, я не мог понять, как это сделать в matplotlib. Установка верхней/нижней части матрицы в None приводит к черному треугольнику. Я погуглил на предмет отсутствия значений в matplotlib, но не смог найти ничего полезного
Ответы
Ответ 1
Проблема с ответом, полученным от doug, заключается в том, что он полагается на то, что colormap отображает нулевые значения в белый. Это означает, что цветовые карты, которые не включают белый цвет, не являются полезными. Ключом для решения является cm.set_bad
функция. Вы маскируете ненужные части матрицы с помощью None или с масками в масках NumPy и set_bad
на белый, вместо черного по умолчанию. Приняв пример doug, мы получаем следующее:
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()
Ответ 2
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]()
Ответ 3
Вы можете построить над одной белой матрицей прозрачную верхнюю/нижнюю часть
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')
верхний/нижний треугольник тепловой карты http://lh5.ggpht.com/_ZgVr3-a-Z00/S4P3_BWByKI/AAAAAAAAAXE/UsJpokz6LKE/pp.png
Ответ 4
С seaborn
, matplotlib
и numpy
, быстрое решение:
import matplotlib.pyplot as plt
import seaborn 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
для макияжа.