拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 如何在matplotlib的x轴上显示日期?

如何在matplotlib的x轴上显示日期?

白鹭 - 2022-02-28 2103 0 0

我有 1994 年 1 月 1 日至 2000 年 4 月 30 日的每日资料。我有日期时间格式的日期,但是当我用 x 轴上的时间和 y 轴上的变量绘制线图时,matplotlib 在 x 轴上打印的太多了。如何通过绘制日期解决此问题?

到目前为止,我已经这样做了:

# get the proper dates 
from datetime import timedelta, date

def daterange(date1, date2):
    for n in range(int ((date2 - date1).days) 1):
        yield date1   timedelta(n)

# jan 1st 1994 - april 30th 2000
start_dt = date(1994,1,1) 
end_dt = date(2000,4,30)

dates = []

for dt in daterange(start_dt, end_dt):
    dates.append(dt.strftime("%Y-%m-%d"))
    #print(dt.shape)
    
dates = np.array(dates)


random = np.random.rand(dates.size)

plt.plot(dates,random)
plt.show()

如何在 matplotlib 的 x 轴上显示日期?

我如何绘制日期以便您可以看到 xticks?

uj5u.com热心网友回复:

让我们从必要的汇入开始:

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

首先要纠正的是您创建源资料的方式:

  1. 使用Pandas代替Numpy(虽然仍然需要一些Numpy方法)。
  2. 由于Pandas有它的原生日期/时间型别(datetime64),所以只使用它,而不是简单的 pythoninc datetime
  3. 将源资料创建为 pandasonic Series

您可以通过以下方式实作:

np.random.seed(1)    # To get repeatable results
dates = pd.date_range('1994-01-01', '2000-04-30')
s = pd.Series(np.random.rand(dates.size), index=dates)

然后是关于影像的评论:由于您有每日资料,您应该只打印每个第 n 个点,例如s[::20]. 否则影像将不可读。

要获取带有日期的影像,您可以运行例如:

plt.plot(s[::20])
plt.xticks(rotation=30)
plt.gca().xaxis.set_minor_locator(mdates.MonthLocator(bymonth=[4,7,10]));

注意事项:

  • 在这种情况下默认打印主要x刻度(年)。
  • 我添加了呼叫set_minor_locator 的 x刻度(四分之一)
  • 不需要旋转x标签,但我认为这是一个不错的功能。如果您不同意,请plt.xticks(rotation=30) 从上面的代码中洗掉

对于上述源资料,我得到了以下影像:

如何在 matplotlib 的 x 轴上显示日期?

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *