对于某些数据集,Matplotlib 不会遵循 set_major_formatter 或 set_minor_formatter 设置的日期格式



我正在使用一个程序制作熊猫数据框架的图,其中x轴为日期和时间,y轴为变量。我希望图表以yyyy-mm-dd hh:mm格式显示x轴上每个刻度的日期和时间。

这是我正在使用的代码(我已经硬编码了一个简单的数据帧,使此代码易于再现)。下面的代码显示了这个图,它有我想要的日期和时间格式。

import pandas as pd
from matplotlib import pyplot as plt
from matplotlib import dates as mdates
df = pd.DataFrame(
[['2022-01-01 01:01', 5],
['2022-01-01 07:01', 10],
['2022-01-01 13:01', 15],
['2022-01-01 19:01', 10]], columns=['Time', 'Variable'])
df['Time'] = pd.to_datetime(df['Time'])
df = df.set_index('Time')
fig, ax = plt.subplots()
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M'))
ax.xaxis.set_minor_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M'))
df.plot(ax=ax)
ax.tick_params(axis='x', labelrotation=45)
plt.show()

如果我从每个时间减去一分钟,并运行下面的代码,我得到这个数字,它有一个完全不同的日期和时间格式。

import pandas as pd
from matplotlib import pyplot as plt
from matplotlib import dates as mdates
df = pd.DataFrame(
[['2022-01-01 01:00', 5],
['2022-01-01 07:00', 10],
['2022-01-01 13:00', 15],
['2022-01-01 19:00', 10]], columns=['Time', 'Variable'])
df['Time'] = pd.to_datetime(df['Time'])
df = df.set_index('Time')
fig, ax = plt.subplots()
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M'))
ax.xaxis.set_minor_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M'))
df.plot(ax=ax)
ax.tick_params(axis='x', labelrotation=45)
plt.show()

除了每次减去一分钟外,我没有对代码做任何更改,但是刻度的格式发生了变化,尽管我使用了set_major_formatter和set_minor_formatter方法为每个刻度指定了格式。

是否有一种方法可以确保刻度的格式保持不变,而不管正在绘制的数据集是什么?

下面的代码通过避免熊猫绘图默认值来逐步解决问题。在所有情况下,您将获得相同的x轴格式。

import pandas as pd
from matplotlib import pyplot as plt
from matplotlib import dates as mdates
df = pd.DataFrame(
[['2022-01-01 01:00', 5 ],
['2022-01-01 07:00', 10],
['2022-01-01 13:00', 15],
['2022-01-01 19:00', 10]], columns=['Time', 'Variable'])
df['Time'] = pd.to_datetime(df['Time'])
fig, ax = plt.subplots()
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M'))
ax.xaxis.set_minor_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M'))
ax.plot('Time','Variable',data=df)
ax.tick_params(axis='x', labelrotation=45)

相关内容

  • 没有找到相关文章

最新更新