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

Seaborn热力图X轴日期格式改为%d-%b的实现方法

解决Seaborn热力图X轴日期格式调整问题

我来帮你搞定这个日期格式的困扰!你之前直接用固定列表替换xticklabels导致效果变差,核心原因是自定义标签和热力图实际的X轴日期数量、对应位置不匹配——毕竟你的数据里的日期肯定远不止12个,强行塞固定列表会让标签错位或重复。

下面给你两种靠谱的解决方案,都是基于原始日期索引来生成对应格式的标签,保证和图表对齐:

方法一:先格式化日期标签再传入热力图

这种方法先把透视表的日期索引转换成你想要的%d-%b格式,再设置显示间隔避免标签拥挤:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
%matplotlib inline

df_general = pd.read_csv('df_general.csv')
df_general['Date'] = pd.to_datetime(df_general['Date'])

# 构建透视表
covid_matrix = df_general.pivot('FAIXA_ETARIA', 'Date', 'count')

# 把每个日期转成%d-%b格式(比如15-Dec)
formatted_dates = [date.strftime('%d-%b') for date in covid_matrix.columns]

# 设置每30个日期显示一个标签,其余位置留空避免重叠
show_every = 30
xtick_labels = [label if i % show_every == 0 else '' for i, label in enumerate(formatted_dates)]

fig = plt.figure(figsize=(15,5))
y_axis_labels = ['0 to 1', '1 to 9', '10 to 19', '20 to 29', '30 to 39', '40 to 49', '50 to 59', '60 to 69', '70 to 79', '80 to 89', '> 90']

sns.heatmap(covid_matrix, xticklabels=xtick_labels, yticklabels=y_axis_labels, cmap='coolwarm')

# 旋转X轴标签,进一步避免重叠
plt.xticks(rotation=45)
plt.show()

方法二:用Matplotlib日期格式化工具自动处理

这种方法更灵活,先画出热力图,再用Matplotlib的日期格式化器统一调整格式:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.dates import DateFormatter
%matplotlib inline

df_general = pd.read_csv('df_general.csv')
df_general['Date'] = pd.to_datetime(df_general['Date'])

covid_matrix = df_general.pivot('FAIXA_ETARIA', 'Date', 'count')

fig = plt.figure(figsize=(15,5))
y_axis_labels = ['0 to 1', '1 to 9', '10 to 19', '20 to 29', '30 to 39', '40 to 49', '50 to 59', '60 to 69', '70 to 79', '80 to 89', '> 90']

# 画热力图时不指定xticklabels,交给后续处理
ax = sns.heatmap(covid_matrix, yticklabels=y_axis_labels, cmap='coolwarm')

# 设置X轴日期格式为%d-%b
date_formatter = DateFormatter('%d-%b')
ax.xaxis.set_major_formatter(date_formatter)

# 控制显示的标签数量,比如按每30天一个的密度调整
ax.xaxis.set_major_locator(plt.MaxNLocator(nbins=len(covid_matrix.columns)//30 + 1))

# 旋转标签提升可读性
plt.xticks(rotation=45)
plt.show()

这两种方法都能保证标签和实际日期一一对应,不会出现错位或混乱的问题,你可以根据自己的习惯选择其中一种~

内容的提问来源于stack exchange,提问作者kvratto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:17:54