Seaborn热力图X轴日期格式设置失效问题求助
解决Seaborn热力图X轴日期格式不生效的问题
问题根源:使用pivot_table后,DataFrame的日期列虽为datetime类型,但Seaborn绘制热力图时会将其转换为字符串分类标签,而非matplotlib可识别的日期轴对象,因此直接用DateFormatter无法生效。
修正后的代码
# Import library import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from matplotlib.dates import DateFormatter # initialize list of lists data = [ ['15-12-2023', 'Australia', 78], ['15-12-2023', 'Europe', 98], ['15-12-2023', 'Mexico', 65], ['15-12-2023', 'Peru', 87], ['17-12-2023', 'Australia', 73], ['17-12-2023', 'Europe', 95], ['17-12-2023', 'Mexico', 84], ['17-12-2023', 'Peru', 68], ['16-12-2023', 'Australia', 90], ['16-12-2023', 'Europe', 91], ['16-12-2023', 'Mexico', 94], ['16-12-2023', 'Peru', 93], ] # Create the pandas DataFrame df = pd.DataFrame(data, columns=['createdtime', 'Region', 'SuccessRate']) df['createdtime'] = pd.to_datetime(df['createdtime'], format='%d-%m-%Y', errors='raise') df = df.sort_values('createdtime', ascending=False) df = df.pivot_table(index="Region", columns="createdtime", values="SuccessRate", fill_value=0) # plot the heatmap fig, (ax) = plt.subplots(1, 1, figsize=(3, 3)) sns.set() sns.heatmap(df, cmap="YlOrRd_r", annot=True, linewidths=.1, fmt='.2f', square=True, cbar=False, annot_kws={ 'fontsize' : 9 }) # 修正X轴日期格式 # 获取当前X轴的datetime标签并转换格式 formatted_dates = [date.strftime("%d-%m") for date in df.columns] # 设置X轴刻度标签 ax.set_xticklabels(formatted_dates) plt.show()
关键修改点
- 放弃
DateFormatter,直接操作热力图的X轴刻度标签:- 从
df.columns取出原始的datetime列对象 - 用
strftime("%d-%m")将每个datetime对象格式化为目标字符串 - 通过
ax.set_xticklabels()替换原有的刻度标签
- 从
这样就能让X轴显示指定的日-月格式日期。
内容的提问来源于stack exchange,提问作者Subhendu De
相关产品推荐
相关产品推荐

