Python 3.x Matplotlib格式X轴显示1970年1月1日

Python 3.x Matplotlib格式X轴显示1970年1月1日,python-3.x,matplotlib,Python 3.x,Matplotlib,Matplotlib的新增功能,尝试在x轴上格式化日期。如果我只使用plt.xticks,则日期是正确的。但是如果我尝试使用ax.xaxis.set_major_格式化程序格式化这些值,它会将轴值更改为基于1970年1月1日的值。我敢肯定这是新手的东西,thx的引导。(顺便说一句,在JupyterLabs笔记本中运行) 不要搞乱格式化程序,而是在数据帧中设置索引 以正确的文本表示日期,并在此基础上调用plot.bar 对象: 对于您的数据,我得到了以下图片: 如您所见,我的代码比您的代码更简

Matplotlib的新增功能,尝试在x轴上格式化日期。如果我只使用plt.xticks,则日期是正确的。但是如果我尝试使用ax.xaxis.set_major_格式化程序格式化这些值,它会将轴值更改为基于1970年1月1日的值。我敢肯定这是新手的东西,thx的引导。(顺便说一句,在JupyterLabs笔记本中运行)


不要搞乱格式化程序,而是在数据帧中设置索引 以正确的文本表示日期,并在此基础上调用plot.bar 对象:

对于您的数据,我得到了以下图片:


如您所见,我的代码比您的代码更简洁。

如果您不想对原始代码做太多更改,只需在设置XTICK时进行转换即可

df_plot['dt']=pd.to_datetime(df_plot['dt'],格式=“%Y-%m-%d”)
plt.xticks(索引+条形图宽度/2,测向图['dt'].dt.strftime('%b-%d-%y'))

工作正常。不知道dataframe索引用作axis matplotlib。这是因为它是从熊猫那里来的吗?从数据帧本身调用plot还有其他好处吗?我喜欢你的代码是多么紧凑,太棒了。感谢pyplot日期格式化程序中的@Valdi_Bo~与定位器一起工作,指定打印日期标签的x(日期)值。所以这里有这样一个冲突,您将x值作为整数,然后尝试根据日期放置x标签。
import pandas as pd
from datetime import date
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
%matplotlib inline

# data to plot
#df_plot = df_dts[df_dts.dt>"8/17/2020"]
df_plot = pd.DataFrame({
    'dt': [date(2020,8,19), date(2020,8,20), date(2020,8,21), date(2020,8,22)],
    'open_cnt': [2,15,2,7],
    'close_cnt': [0,2,11,0]
})

# create plot
fig, ax = plt.subplots()
fig.set_size_inches(10, 5, forward=True)
index = np.arange(len(df_plot))
bar_width = 0.35
opacity = 0.8

rects1 = plt.bar(index, df_plot.open_cnt, bar_width, alpha=opacity, color='orange', label='Open')
rects2 = plt.bar(index + bar_width, df_plot.close_cnt, bar_width, alpha=opacity, color='g', label='Close')

plt.xlabel('Date')
plt.ylabel('Workitems')
plt.title('Open & Close Rates')
plt.xticks(index + bar_width/2, df_plot.dt)
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b-%d-%y'))
plt.show()
fig, ax = plt.subplots(figsize=(10,5))
ax = df_plot.set_index(df_plot.dt.map(lambda s: s.strftime('%b-%d-%y')))\
    .plot.bar(ax=ax, legend=False, title='Open & Close Rates', rot=0,
    color=['orange', 'green'])
ax.set_xlabel('Date')
ax.set_ylabel('Workitems');