datetime索引值未正确绑定到python中的x轴刻度

问题描述 投票:0回答:1

我能够通过使用我的绘图数据来绘制折线图,​​但x轴行情指示器显示不正确。因为我的数据框具有period datetimeindex对象,所以我想沿x轴正确显示它们。我尝试了一些有关axis ticker的现有帖子,但仍然没有正确的情节。如何解决?任何想法?谢谢

EDA数据

这里是plotting data on gist

我的尝试

这是我目前的尝试:

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

df = pd.read_csv('plot_data.csv', encoding='utf-8')
df.div(df.Total, axis=0).applymap(lambda x: f'{x * 100:.2f}%')
fig, ax1 = plt.subplots(figsize=(14,6))
_ = df.div(df.Total, axis=0).iloc[:, :-1].plot(kind='line', ax=ax1, ax=ax1, marker='o',ls='--')
ax1.yaxis.set_major_formatter(FuncFormatter(lambda y, _: '{:.0%}'.format(y))) 
ax1.xaxis.set_major_locator(mdates.DayLocator())
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%m-%d-%Y'))
plt.show()

目标

我想绘制一个折线图,其中y轴应正确显示百分比,而x轴应正确显示沿年的时间段。在我的代码中,x轴行情显示不正确。有什么主意吗?

python matplotlib date-formatting
1个回答
-2
投票

[quarter列已转换为datetime格式,然后设置为索引:

import matplotlib.dates as mdates

df = pd.read_csv('plot_data.csv', encoding='utf-8')
df['quarter'] = pd.to_datetime(df['quarter'], format='%Y-%m-%d')
df = df.set_index(df['quarter'])
df = df.sort_index()
fig, ax1 = plt.subplots(figsize=(14,6))
_ = df.drop('quarter', axis=1).div(df.Total, axis=0).iloc[:, :-1].plot(kind='line', ax=ax1)
ax1.yaxis.set_major_formatter(plt.FuncFormatter(lambda y, _: '{:.0%}'.format(y))) 
ax1.set_xticks(df.index)
ax1.xaxis_date()
plt.show()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.