使用pandas的DataFrame.plot()自定义刻度后残留原刻度问题
解决Pandas时间序列绘图自定义x轴刻度残留问题
问题出在Pandas的plot()方法会自动生成时间轴刻度,直接调用set_xticks()和set_xticklabels()仅会添加自定义刻度,无法完全覆盖原有自动生成的刻度。可以通过以下两种方式彻底替换:
方法1:使用plt.xticks()直接替换
plt.xticks()会直接覆盖原有刻度设置,确保只显示自定义的刻度和标签:
import pandas as pd import matplotlib.pyplot as plt import numpy.random as rn series_dt = pd.Series(rn.randint(1000,10000,24),index=pd.date_range(start='2020-01-01',periods=24,freq='MS')) ax = series_dt.plot(figsize=(10,7),rot=45) xticks_positions = series_dt.index[::2] # 直接替换所有刻度和标签 plt.xticks(ticks=xticks_positions, labels=xticks_positions.strftime('%b %Y'), rotation=45) plt.show()
方法2:使用Matplotlib日期定位器与格式化器(更规范)
针对时间轴,使用Matplotlib的FixedLocator和DateFormatter可以精准控制刻度,彻底替换自动生成的刻度:
import pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdates import numpy.random as rn series_dt = pd.Series(rn.randint(1000,10000,24),index=pd.date_range(start='2020-01-01',periods=24,freq='MS')) ax = series_dt.plot(figsize=(10,7),rot=45) # 指定自定义刻度位置 ax.xaxis.set_major_locator(mdates.FixedLocator(series_dt.index[::2])) # 设置标签格式 ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %Y')) plt.show()
这两种方式都能确保仅显示你自定义的x轴刻度和标签,不会残留原有自动生成的刻度。
内容的提问来源于stack exchange,提问作者Ali Haider
相关产品推荐
相关产品推荐

