我试着画一个相图,用x,y轴坐标定义正方形的面积,而不是等间距的。
例如,我有以下数组:
import numpy as np
x = np.array([ 10, 50, 100, 150])
y = np.array([100, 80, 60, 40, 20, 10, 5])
z = np.array([[0.31, 0.33, 0.34 , 0.34],
[0.31, 0.34, 0.34, 0.34],
[0.30, 0.34, 0.35, 0.34],
[0.30, 0.33, 0.34 , 0.34],
[0.29, 0.31, 0.31, 0.31],
[0.29, 0.30, 0.30, 0.29],
[0.28 , 0.28, 0.28 , 0.29]])
我试着用sns.heatmap()把它画成一个矩形,但是我不能根据x,y坐标改变正方形的面积,而不是相等的大小。
我得到这个结果:
热图
我还尝试了遵循我在这里找到的一个建议:Plotting a 2D heatmap使用这里修改的代码,如下所示,但这样的区域是不同的,但不完全正确:
import matplotlib.pyplot as plt
import numpy as np
z_min, z_max = np.abs(z).min(), np.abs(z).max()
fig, ax = plt.subplots()
c = ax.pcolormesh(x, y, z, cmap='RdBu', vmin=z_min, vmax=z_max, shading='auto', edgecolors='black')
ax.set_title('pcolormesh')
# set the limits of the plot to the limits of the data
ax.axis([x.min(), x.max(), y.min(), y.max()])
fig.colorbar(c, ax=ax)
plt.show()
这给出了这个结果,这似乎几乎是我想要的,但平方不是正确的大小,我不太明白为什么:
pcolormesh
如果我也能用每个方块的实际值来注解这个图,那就太好了!
2条答案
按热度按时间xu3bshqb1#
pcolormesh
的x
和y
表示单元格之间 * 边 * 的位置。如果水平方向有4个单元格,则有5条边。假设给定的
x
和y
是单元格宽度,可以使用np.cumsum()
计算边缘位置。边缘可用于计算单元格中心的位置,例如用x和y量标记行和列。
kcrjzv8t2#