Matplotlib:使用存储在列表中的x,y,z值在热图中显示双方数据

时间:2015-11-26 12:58:26

标签: python matplotlib heatmap

我第一次尝试使用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()

enter image description here

1 个答案:

答案 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])

pcolormesh with nice labels