如何调整Seaborn热力图X轴月份为Jan到Dec的自然排序?
解决方案
你遇到的X轴月份顺序混乱是因为pandas默认对字符串类型的列按字典序排序,无法识别月份的自然先后顺序,把Month列转为有序分类类型即可解决,修改后完整代码如下:
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns sns.set_theme() data=df.rename(columns={0:'Year', 1:'Month', 2:'Count'}) # 定义月份自然顺序,注意和你数据里的月份缩写写法保持一致 month_order = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'] # 将Month列转为有序分类类型,指定排序规则 data['Month'] = pd.Categorical(data['Month'], categories=month_order, ordered=True) data= pd.pivot_table(data, values='Count', index='Year', columns='Month') f, ax = plt.subplots(figsize=(15, 6)) sns.heatmap(data, annot=True, fmt="d", linewidths=.5, ax=ax) plt.show()
补充说明
- 如果你数据里的九月是
Sep而非Sept、六月/七月是Jun/Jul而非June/July,对应调整month_order列表里的元素即可,要保证和数据中的写法完全匹配。 - 如果需要X轴按月份降序排列,直接把顺序列表反转即可:
month_order = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'][::-1] - 设置有序分类后,生成透视表时pandas会自动按照指定的分类顺序排列列,无需额外排序操作,生成的热力图X轴就会符合预期。
内容的提问来源于stack exchange,提问作者lpt
相关产品推荐
相关产品推荐

