比较以下代码:
test = pd.DataFrame({'date':['20170527','20170526','20170525'],'ratio1':[1,0.98,0.97]})
test['date'] = pd.to_datetime(test['date'])
test = test.set_index('date')
ax = test.plot()
我在最后添加了
DateFormatter
:test = pd.DataFrame({'date':['20170527','20170526','20170525'],'ratio1':[1,0.98,0.97]})
test['date'] = pd.to_datetime(test['date'])
test = test.set_index('date')
ax = test.plot()
ax.xaxis.set_minor_formatter(dates.DateFormatter('%d\n\n%a')) ## Added this line
第二个图的问题在于它以
5-24
而不是5-25
开头。另外,2017年的5-25
是星期四而不是星期一。是什么原因引起的?这个时区有关系吗? (我也不明白为什么日期数字会彼此叠加) 最佳答案
通常,pandas和matplotlib的datetime实用程序不兼容。因此,在大多数情况下,尝试在使用 Pandas 创建的日期轴上使用matplotlib.dates
对象会失败。
原因之一是从the documentation看
但是,这不是唯一的区别,因此建议在日期时间对象中不要将pandas和matplotlib混合使用。
但是,可以选择告诉 Pandas 不要使用其自己的日期时间格式。在这种情况下,可以使用matplotlib.dates
代码。这可以通过控制。
df.plot(x_compat=True)
由于 Pandas 不提供日期的复杂格式化功能,因此可以使用matplotlib进行绘图和格式化。
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as dates
df = pd.DataFrame({'date':['20170527','20170526','20170525'],'ratio1':[1,0.98,0.97]})
df['date'] = pd.to_datetime(df['date'])
usePandas=True
#Either use pandas
if usePandas:
df = df.set_index('date')
df.plot(x_compat=True)
plt.gca().xaxis.set_major_locator(dates.DayLocator())
plt.gca().xaxis.set_major_formatter(dates.DateFormatter('%d\n\n%a'))
plt.gca().invert_xaxis()
plt.gcf().autofmt_xdate(rotation=0, ha="center")
# or use matplotlib
else:
plt.plot(df["date"], df["ratio1"])
plt.gca().xaxis.set_major_locator(dates.DayLocator())
plt.gca().xaxis.set_major_formatter(dates.DateFormatter('%d\n\n%a'))
plt.gca().invert_xaxis()
plt.show()
关于python - Pandas Dataframe线图在x轴上显示日期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44213781/