Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python matplotlib-如何确保x轴值与源数据相同_Python_Matplotlib_Plot - Fatal编程技术网

python matplotlib-如何确保x轴值与源数据相同

python matplotlib-如何确保x轴值与源数据相同,python,matplotlib,plot,Python,Matplotlib,Plot,我正试图在matplotlib上进行一些绘图。这是我的数据df: datadate loss_CF 0 2020-03-31 14744.417859 1 2020-06-30 18443.540626 2 2020-09-30 21902.934212 3 2020-12-31 24743.491101 4 2021-03-31 22532.267947 5 2021-06-30 21835.597756 6 2021-09-30 21607.

我正试图在matplotlib上进行一些绘图。这是我的数据
df

     datadate       loss_CF
0  2020-03-31  14744.417859
1  2020-06-30  18443.540626
2  2020-09-30  21902.934212
3  2020-12-31  24743.491101
4  2021-03-31  22532.267947
5  2021-06-30  21835.597756
6  2021-09-30  21607.682299
7  2021-12-31  22898.842686
8  2022-03-31  21513.368257
9  2022-06-30  20412.728656
10 2022-09-30  19598.518147
11 2022-12-31  18220.543880
下面是我绘制它的代码:

import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter

#date = df['datadate'].dt.strftime('%y-%b')
fig, ax = plt.subplots()
y_formatter = ticker.StrMethodFormatter('${x:,.0f}')
x_formatter = DateFormatter('%b-%y')
ax.yaxis.set_major_formatter(y_formatter)
ax.xaxis.set_major_formatter(x_formatter)
plt.plot(df['datadate'], df['loss_CF'])
plt.show()
这是我得到的数字:


是否有办法将x轴值更改为
df
中的
datadate
?换句话说,我希望它们都是季度末月份,而不是1月、5月等。例如,与第一个数据点对应的第一个勾号应该是3月20日。我该怎么做?我认为
ax.setxticks
ax.setxticklabels
可能是答案,但在尝试了很长时间后,我仍然无法获得理想的绘图。由于您的数据不太长,您可以根据字符串进行绘图:

fig, ax = plt.subplots(figsize=(10,6))

plt.plot(df['datadate'].dt.strftime('%b-%y'), df['loss_CF'])
plt.show()
输出:

此外,您还可以尝试熊猫的绘图功能:

fig, ax = plt.subplots(figsize=(10,6))
x_formatter = DateFormatter('%b-%y')
(df.assign(date=df.datadate.dt.to_period('Q'))
   .plot(x='date',y='loss_CF',ax=ax)
)
输出: