如何将datetime64格式日期格式化为Matplotlib xtick标签?
问题:自定义散点图X轴日期刻度格式
我在DataFrame中有一列名为"Datum2"的datetime64格式日期(原始格式为YYYYMMDD),希望将其用作散点图的X轴刻度标签,要求标签显示年份及月份缩写(例如2022、Nov、Dec、2023、Jan、Feb等)。目前使用的代码生成的刻度不符合需求,参考了Matplotlib的ConciseDateConverter但不知如何落地,现有代码如下:
import seaborn as sns import matplotlib.pyplot as plt import scipy.stats as stats import numpy as np import pandas as pd df_tagesspiegel_final['Datum2'] = pd.to_datetime(df_tagesspiegel_final['Datum'], format='%Y%m%d') # Scatterplot erstellen sns.scatterplot(x='Datum2', y = 'compound', data=df_tagesspiegel_final) #Quintile als xticks speichern xticks = [df_tagesspiegel_final['Datum2'].min(), df_tagesspiegel_final['Datum'].median(numeric_only=True), df_tagesspiegel_final['Datum'].max()] plt.gca().set(xticks=xticks, xlabel='Datum', ylabel='compound', title='Compound-Sentiment im Zeitverlauf') plt.show()
解决方案
直接使用Matplotlib的ConciseDateFormatter即可实现智能的日期刻度格式,它会根据数据的时间跨度自动切换显示年份、月份缩写等标签,无需手动指定固定刻度。修改后的代码如下:
import seaborn as sns import matplotlib.pyplot as plt import matplotlib.dates as mdates import pandas as pd # 确保日期列转换为datetime格式 df_tagesspiegel_final['Datum2'] = pd.to_datetime(df_tagesspiegel_final['Datum'], format='%Y%m%d') # 绘制散点图 sns.scatterplot(x='Datum2', y='compound', data=df_tagesspiegel_final) # 获取当前坐标轴 ax = plt.gca() # 使用ConciseDateFormatter设置X轴刻度 # 先设置日期定位器,让刻度间隔更合理 locator = mdates.AutoDateLocator(minticks=3, maxticks=7) formatter = mdates.ConciseDateFormatter(locator) ax.xaxis.set_major_locator(locator) ax.xaxis.set_major_formatter(formatter) # 设置图表其他属性 ax.set(xlabel='Datum', ylabel='compound', title='Compound-Sentiment im Zeitverlauf') # 自动旋转X轴标签,避免重叠 plt.xticks(rotation=45) plt.show()
关键说明:
AutoDateLocator会根据数据的时间范围自动选择合适的刻度间隔,minticks和maxticks控制刻度数量的范围ConciseDateFormatter会自动切换刻度显示格式:当跨度包含跨年时,会显示年份+月份缩写;同一年份内则只显示月份缩写,完全匹配需求- 移除了手动指定xticks的代码,让自动刻度逻辑生效
- 添加
plt.xticks(rotation=45)避免标签重叠
内容的提问来源于stack exchange,提问作者Yeb0
相关产品推荐
相关产品推荐

