使用来自 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
- 实际大小为(121,3)
我想绘制一个 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()
我有一个 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 |
- 实际大小为(121,3)
我想绘制一个 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()