我有(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]]
答案 0 :(得分:1)
以下是数组的索引方式以及生成的imshow
或matshow
图的外观。这里的数组是形状(7,5),所以你有7行5列。列为x
,行为y
。
以下是imshow
和matshow
之间的区别,imshow
在图表底部有x个标记。
您可以转置数组以将列转换为行,反之亦然。如果A
是您的数组且您有import
ed numpy as np
,请执行
A = np.array(A).T
答案 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()