我第一次尝试使用Matplotlib生成热图。我有每个x,y单元格的值(z)。感谢this page,我认为我接近得到了我想要的东西,但我的情节没有显示所有数据。缺少第5列和第5行。我错过了什么吗?
import matplotlib.pyplot as plt
import numpy as np
# x, y data
x = [1, 2, 3, 4, 5]
y = [1, 2, 3, 4, 5]
z = [
[100, 500, 10, 50, 100],
[200, 600, 100, 600, 200],
[300, 700, 50, 700, 300],
[200, 600, 100, 600, 200],
[600, 200, 10, 50, 600]
]
x, y = np.meshgrid(x, y)
z = np.array(z)
plt.pcolormesh(x, y, z, cmap = 'Blues')
plt.colorbar()
plt.show()
答案 0 :(得分:1)
x和y是分隔单元格(=正方形)的线条的坐标,而不是它们的中心。
因此,对于5 * 5个单元格,应该有6 * 6 x坐标和6 * 6 y坐标。 类似的东西:
x = [0 ,1, 2, 3, 4, 5]
y = [0 ,1, 2, 3, 4, 5]
如果你想让标签位于中心,这里有一个技巧:
x=[0.5,1.5,2.5,3.5,4.5,5.5]
y= x
z = [
[100, 500, 10, 50, 100],
[200, 600, 100, 600, 200],
[300, 700, 50, 700, 300],
[200, 600, 100, 600, 200],
[600, 200, 10, 50, 600]
]
x, y = np.meshgrid(x, y)
z = np.array(z)
plt.pcolormesh(x, y, z, cmap = 'Blues')
plt.xlim([0.5,5.5])
plt.ylim([0.5,5.5])