如何在 matplotlib 中的 x 轴上显示日期?
How can I display dates on the x axis in matplotlib?
我有从 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()
如何绘制日期以便您可以看到 xticks?
让我们从必要的导入开始:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
首先要纠正的是创建源数据的方式:
- 使用Pandas代替Numpy(虽然一些Numpy方法是仍然需要)。
- 由于 Pandas 具有其原生的 date/time 类型 (datetime64),请只使用它,而不是纯 pythoninc datetime.
- 创建源数据为熊猫系列.
您可以通过以下方式实现:
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]));
注意事项:
- Major x 默认情况下打印刻度(年)。
- 我添加了 minor x 滴答(四分之一)调用 set_minor_locator。
- x 标签的旋转不是必需的,但我认为这是一个
不错的功能。如果您不同意,请删除
plt.xticks(rotation=30)
来自上面的代码。
对于上面的源数据我得到了下图:
我有从 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()
如何绘制日期以便您可以看到 xticks?
让我们从必要的导入开始:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
首先要纠正的是创建源数据的方式:
- 使用Pandas代替Numpy(虽然一些Numpy方法是仍然需要)。
- 由于 Pandas 具有其原生的 date/time 类型 (datetime64),请只使用它,而不是纯 pythoninc datetime.
- 创建源数据为熊猫系列.
您可以通过以下方式实现:
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]));
注意事项:
- Major x 默认情况下打印刻度(年)。
- 我添加了 minor x 滴答(四分之一)调用 set_minor_locator。
- x 标签的旋转不是必需的,但我认为这是一个
不错的功能。如果您不同意,请删除
plt.xticks(rotation=30)
来自上面的代码。
对于上面的源数据我得到了下图: