You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化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方法但没成功,有两个疑问:

  1. 使用Seaborn或imshow是否是正确的实现方式?
  2. 如何转置索引为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:27:45