使用来自 pandas 数据帧的 x y z 数据在 matplotlib 中绘制二维 Colormap/Heatmap

Plot a 2D Colormap/Heatmap in matplotlib with x y z data from a pandas dataframe

我有一个 pandas 数据框,看起来像这样

X Y Z
-1 -1 123
-1 0 456
-1 1 678
0 -1 124
0 0 890
0 1 121
1 -1 767
1 0 987
1 1 450

我想绘制一个 2D 颜色图,其中 X 和 Y 位于 x,y 轴上,Y 将值的强度显示为绘图右侧的颜色条。

请注意,此处 Z 列的值不是 X 和 Y 的函数。

我试图将这个数据帧转换成一个 numpy 数组。当我没有 Z 对 X 和 Y 的依赖性时,我在创建大小为 (121,121) 的 Z 网格时遇到了麻烦。我尝试使用 imshow 和 pcolor 并查看了其他类似的答案,但我知道找不到任何东西。

最直接的方法是 Seaborn 的热图:

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
from io import StringIO

data_str = '''-1    -1  123
-1  0   456
-1  1   678
0   -1  124
0   0   890
0   1   121
1   -1  767
1   0   987
1   1   450'''
df = pd.read_csv(StringIO(data_str), names=['x', 'y', 'z'], delim_whitespace=True)
df_pivoted = df.pivot(columns='x', index='y', values='z')
ax = sns.heatmap(data=df_pivoted, annot=True, fmt='d', cmap='RdYlGn', cbar=True, cbar_kws={'label': 'z'}, square=True)
ax.tick_params(labelrotation=0)
plt.show()