如何优化Pandas热图?实现日期横轴、指标纵轴展示
问题描述
现有DataFrame结构
SPX RYH RSP RCD RYE ... RTM RHS RYT RYU EWRE Date ... 2022-02-25 NaN NaN NaN NaN NaN ... NaN NaN NaN NaN NaN 2022-03-04 9.0 5.0 8.0 12.0 1.0 ... 6.0 4.0 11.0 2.0 3.0 2022-03-11 8.0 12.0 6.0 11.0 1.0 ... 3.0 13.0 9.0 2.0 4.0 2022-03-18 5.0 6.0 8.0 1.0 13.0 ... 9.0 10.0 2.0 12.0 11.0 2022-03-25 5.0 12.0 9.0 13.0 1.0 ... 2.0 4.0 10.0 3.0 7.0
DataFrame信息
>>> a.ranks.info() <class 'pandas.core.frame.DataFrame'> DatetimeIndex: 52 entries, 2022-02-25 to 2023-02-17 Data columns (total 13 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 SPX 51 non-null float64 1 RYH 51 non-null float64 2 RSP 51 non-null float64 3 RCD 51 non-null float64 4 RYE 51 non-null float64 5 RYF 51 non-null float64 6 RGI 51 non-null float64 7 EWCO 51 non-null float64 8 RTM 51 non-null float64 9 RHS 51 non-null float64 10 RYT 51 non-null float64 11 RYU 51 non-null float64 12 EWRE 51 non-null float64 dtypes: float64(13) memory usage: 5.7 KB >>>
当前绘图代码
cmap = sns.diverging_palette(133, 10, as_cmap=True) sns.heatmap(self.ranks, cmap=cmap, annot=True, cbar=False) plt.show()
当前生成的热图将日期放在纵轴、指标放在横轴,我需要调整布局,让指标符号在纵轴、日期在横轴。尝试过imshow()和各类pivot方法但没成功,有两个疑问:
- 使用Seaborn或imshow是否是正确的实现方式?
- 如何转置索引为Datetime的Pandas DataFrame?
解答
1. 实现方式是否正确
Seaborn的heatmap()是完全适配这类需求的工具,比直接用imshow()更省心——它能自动识别DataFrame的索引和列标签,不用手动映射坐标与标签,还支持直接添加标注、自定义配色等功能,完全能满足你的热图布局调整需求。
2. 转置Datetime索引的DataFrame
转置操作非常简单,直接调用DataFrame的.T属性即可,不需要复杂的pivot操作。转置后,原DataFrame的列(指标符号)会变成新的索引(对应纵轴),原Datetime索引会变成新的列(对应横轴),正好匹配你想要的布局。
修改后的绘图代码如下:
cmap = sns.diverging_palette(133, 10, as_cmap=True) # 转置DataFrame后传入heatmap sns.heatmap(self.ranks.T, cmap=cmap, annot=True, cbar=False) plt.show()
如果转置后横轴的日期标签过于拥挤,可以添加代码优化显示,比如旋转标签避免重叠:
cmap = sns.diverging_palette(133, 10, as_cmap=True) ax = sns.heatmap(self.ranks.T, cmap=cmap, annot=True, cbar=False) # 旋转横轴日期标签,优化显示 ax.set_xticklabels(ax.get_xticklabels(), rotation=45, ha='right') plt.tight_layout() plt.show()
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

