如何使用matshow命令生成热图?

时间:2017-03-27 06:25:31

标签: python matplotlib

我有(320,100)矩阵。我想绘制它的热图。矩阵的行应沿x轴,列应沿y轴。我正在使用matshow函数。这是matshow函数沿x轴还是列给出行?除此之外是将x轴标记为0到100,y轴标记为0到300.为什么会这样做?为什么它没有选择矩阵的值?

[[-0.2706643  -0.25426278 -0.06284858 ..., -0.06432685  0.03350727
  -0.09772336]
 ..., 

 [-0.2630468  -0.2508091  -0.16554087 ..., -0.3019954   0.11554097
  -0.13261844]]

2 个答案:

答案 0 :(得分:1)

以下是数组的索引方式以及生成的imshowmatshow图的外观。这里的数组是形状(7,5),所以你有7行5列。列为x,行为y

enter image description here

以下是imshowmatshow之间的区别,imshow在图表底部有x个标记。

enter image description here

您可以转置数组以将列转换为行,反之亦然。如果A是您的数组且您有import ed numpy as np,请执行

A = np.array(A).T

enter image description here

答案 1 :(得分:0)

让我们假设您的Matrix被称为“my_matrix”。 要检查行数,

print len(my_matrix)

要检查正确的列数, print len(my_matrix[0])

如果不正确,请使用numpy_array = numpy.array(my_matrix)将矩阵转换为numpy数组(我总是默认执行此操作)。 然后使用numpy_array.reshape(行,列)执行矩阵重塑

您可以使用matplotlib三维绘制此矩阵:

import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np

fig = plt.figure(figsize=(10, 8))
ax = fig.gca(projection='3d')
ax.set_aspect('equal')
X = np.arange(xstart, xend, 1)
Y = np.arange(ystart, yend, 1)
X, Y = np.meshgrid(X, Y)

surf = ax.plot_surface(X, Y, matrix_to_plot , rstride=1, cstride=1, cmap=cm.hot, linewidth=0, antialiased=True)

ax.zaxis.set_major_locator(LinearLocator(5))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
ax.set_xlim([xstart, xend])
ax.set_ylim([ystart, yend])
ax.set_xlabel("X")
ax.set_ylabel("Y")

fig.colorbar(surf, shrink=0.5, aspect=5)

plt.tight_layout()
plt.show()