Python时间轴X轴范围调整:仅显示1970-2020年份
解决时间轴X轴显示问题
原代码的问题在于X轴使用了按月定位的MonthLocator,导致仅显示1970年附近的月份,无法覆盖1970-2020的年份范围。以下是修改后的完整代码,实现X轴仅显示1970、1980…2020的年份:
import matplotlib.pyplot as plt import numpy as np import matplotlib.dates as mdates import pandas as pd # 补全原代码遗漏的pandas导入 df = pd.DataFrame( { 'event': ['a', 'b','c','d','e','f'], 'date': ['1970','1980','1990','2000','2010','2020'] } ) df['date'] = pd.to_datetime(df['date']) levels = np.tile( [-5, 5, -3, 3, -1, 1], int(np.ceil(len(df)/6)) )[:len(df)] fig, ax = plt.subplots(figsize=(12.8, 4), constrained_layout=True); ax.set(title="A series of events") ax.vlines(df['date'], 0, levels, color="tab:red"); # 垂直茎线 ax.plot( # 基线及标记点 df['date'], np.zeros_like(df['date']), "-o", color="k", markerfacecolor="w" ); # 标注事件文本 for d, l, r in zip(df['date'], levels, df['event']): ax.annotate( r, xy=(d, l), xytext=(-3, np.sign(l)*3), textcoords="offset points", horizontalalignment="right", verticalalignment="bottom" if l > 0 else "top" ); # 修改X轴设置:每10年一个刻度,仅显示年份 ax.xaxis.set_major_locator(mdates.YearLocator(base=10)); # 每10年生成一个刻度 ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y")); # 格式化为仅显示年份 plt.setp(ax.get_xticklabels(), rotation=0, ha="center"); # 标签居中,无需旋转 # 移除Y轴和多余边框 ax.yaxis.set_visible(False); ax.spines["left"].set_visible(False) ax.spines["top"].set_visible(False) ax.spines["right"].set_visible(False) ax.margins(y=0.1); plt.show();
关键修改说明:
- 补全原代码遗漏的
import pandas as pd,否则无法创建DataFrame - 将X轴定位器从
MonthLocator替换为YearLocator(base=10),确保每10年生成一个刻度 - 用
DateFormatter("%Y")将X轴标签格式化为仅显示年份 - 调整X轴标签的对齐方式为居中,无需旋转(仅显示年份,长度较短)
- 移除重复的
ax.yaxis.set_visible(False)语句
修改后,X轴会自动适配1970-2020的范围,且仅显示指定的年份刻度。
内容的提问来源于stack exchange,提问作者Avi
相关产品推荐
相关产品推荐

