如何使用 Matplotlib 在可读图形中格式化数千个与日期相关的数据点?

How can I format multiple thousands of date-dependant data points in a readable graph with Matplotlib?

我有两个对应的列表,一个是日期,另一个是相应的价格。列表有 30,000 个数据点。

x = [datetime.date(1997, 8, 8), datetime.date(2021, 8, 17), datetime.date(2019, 8, 7), ... ]

y = [0.49, 1.99, 0.0, ...]

我正在使用此代码生成下图:

plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%Y/%m/%d'))
plt.gca().xaxis.set_major_locator(mdates.DayLocator(interval=5))
plt.scatter(x,y)
plt.gcf().autofmt_xdate()
plt.show()

我应该使用上面的代码以可读的格式分隔日期,但它似乎不起作用。我也不确定是否可以使图表更具可读性,或者这是否是具有如此多数据点的散点图的本质(不确定还有什么用)。

日期从 1997 年到 2022 年,价格从 0.0(免费)到 300。

此外,我收到此错误,即使在显示图表时也会不断弹出,但我不知道它在做什么:

Locator attempting to generate 1995 ticks ([9591.0, ..., 19561.0]), which exceeds Locator.MAXTICKS (1000).

如果你想让你的图表更具可读性,你需要将 DayLocator 对象的间隔增加到至少 6000。此外,你可以使用 [=12= 更改散点的大小] scatter 函数的参数:

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

x = pd.date_range(datetime.today(), periods=30000).tolist()
y = list(range(30000))

plt.gca().xaxis.set_major_locator(mdates.DayLocator(interval=6000))
plt.gca().xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y'))
plt.gcf().autofmt_xdate()
plt.scatter(x, y, s=0.1)

输出: