Python 熊猫+;matplotlib:更改日期刻度格式
Pandas具有方便的Pandas.DataFrame.plot功能,可使用Matplotlib绘制数据框的所有列。我经常发现自己在使用DatetimeIndex,因此生成的图共享相同的DateTimeX轴。但是,我还经常希望使用Matplotlib DateFormatter格式化结果图上的刻度标签。但这似乎是不可能的 要显示我的问题,请使用一个小示例代码:Python 熊猫+;matplotlib:更改日期刻度格式,python,pandas,datetime,matplotlib,Python,Pandas,Datetime,Matplotlib,Pandas具有方便的Pandas.DataFrame.plot功能,可使用Matplotlib绘制数据框的所有列。我经常发现自己在使用DatetimeIndex,因此生成的图共享相同的DateTimeX轴。但是,我还经常希望使用Matplotlib DateFormatter格式化结果图上的刻度标签。但这似乎是不可能的 要显示我的问题,请使用一个小示例代码: import matplotlib.dates as dates import matplotlib.pyplot as plt imp
import matplotlib.dates as dates
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
fig, ax = plt.subplots(nrows=3, figsize=(8, 11))
# Create DataFrame with random data
df = pd.DataFrame({"foo": np.random.random(100), "bar": np.random.random(100)},
index=pd.date_range("2020-01-01", freq="D", periods=100))
# First method
df.plot(ax=ax[0])
ax[0].set_title("df.plot()")
# Second method
df.plot(ax=ax[1])
ax[1].xaxis.set_major_formatter(dates.DateFormatter("%Y-%m-%d"))
ax[1].set_title('ax = df.plot(); ax.xaxis.set_major_formatter(dates.DateFormatter("%Y-%m-%d"))')
# Third method
ax[2].plot_date(df.index, df["foo"].values, fmt="-", label="foo")
ax[2].plot_date(df.index, df["bar"].values, fmt="-", label="bar")
pd.DatetimeIndex
ax[2].xaxis.set_major_formatter(dates.DateFormatter("%Y-%m-%d"))
ax[2].set_title('ax.plot_date(df.index, df["foo"]); ax.plot_date(df.index, df["bar"])\nax.xaxis.set_major_formatter(dates.DateFormatter("%Y-%m-%d"))')
ax[2].legend()
# Rotate ticklabels in all plots
for ax in fig.get_axes():
ax.tick_params(rotation=45)
plt.tight_layout()
结果如下图所示:
如您所见,第一个绘图上的小刻度位置并不完美,但日期符号至少是正确的
在第二个绘图中,我尝试使用matplotlib DateFormatter对日期的实际显示方式进行更多的控制,但指出的日期完全错误。此外,使用%y而不是%y将在我的Windows计算机上引发错误,因为年份必须大于1900
在第三个绘图中,我跳过了Pandas内置的绘图功能,直接使用Matplotlib,使用完全相同的技术格式化日期刻度标签。这正是我想要它做的,以我自己定义的方式显示正确的日期
我还尝试过使用pandas.DatetimeIndex.to_pydatetime和pandas.Timestamp的to_pydatetime、to_datetime64、to_numpy和to_julian_date函数将数据帧的索引转换为各种日期时间,但没有成功
是否有可能控制用户如何标记DatetimeIndex的datetime值?还是我一直坚持使用Matplotlib手动创建绘图
基本上:我可以使用pd.DataFrame.plot()而不是plt.plot_date()获得第三个绘图的结果吗?
df.plot
只是绘制数据帧的一个方便函数。它返回一个Axes
对象,您可以根据自己的意愿修改它:ax[0].xaxis.set\u major\u formatter(dates.DateFormatter(“%Y-%m-%d”)
您到底想问什么还不太清楚@CodeDifferent正如您在我的示例中所看到的,这不起作用…df.plot
只是一个绘制数据帧的方便函数。它返回一个Axes
对象,您可以根据自己的意愿修改它:ax[0].xaxis.set\u major\u formatter(dates.DateFormatter(“%Y-%m-%d”)
您到底想问什么还不太清楚@正如你在我的例子中看到的,代码不同,这不起作用。。。