在Matplotlib

时间:2019-03-14 04:35:26

标签: python matplotlib

我试图将日期列表添加到Matplotlib xticks中,当我这样做时,实际图只保留xticks就消失了。

例如,我有以下代码:

import numpy as np
import datetime as dt
import matplotlib.pyplot as plt
from matplotlib.dates import (DateFormatter, rrulewrapper, RRuleLocator, YEARLY)

# Generate random data and dates
data = np.random.randn(10000)
start = dt.datetime.strptime("2019-03-14", "%Y-%m-%d")
end = dt.datetime.strptime("2046-07-30", "%Y-%m-%d")
date = [start + dt.timedelta(days=x) for x in range(0, (end-start).days)]

rule = rrulewrapper(YEARLY, byeaster=1, interval=2)
loc = RRuleLocator(rule)
formatter = DateFormatter('%d/%m/%y')

fig, ax = plt.subplots()
ax.xaxis.set_major_locator(loc)
ax.xaxis.set_major_formatter(formatter)
ax.xaxis.set_tick_params(rotation=30, labelsize=10)
plt.plot(data)
# ax.set_xlim(min(date), max(date))
plt.show()

此代码绘制的数据如下所示:

test-1

现在,如果我取消注释ax.set_xlim(min(date), max(date))并重新运行得到的代码:

test-2

您可以看到我只得到日期,格式正确,但没有格式。我不确定这是什么问题。任何帮助将不胜感激。

更新

如果我将data = np.random.randn(10000)更改为data = np.random.randn(1000000),那么我就能看到那不是我想要的情节

2 个答案:

答案 0 :(得分:0)

很有可能绘制了您的数据,但是没有正确的位置。如果您使用that example,则需要在代码中添加类似fig.autofmt_xdate()的内容。

答案 1 :(得分:0)

方法是通过在plot方法中传递date数组和data数组。在给定的示例中将是:

import numpy as np
import datetime as dt
import matplotlib.pyplot as plt
from matplotlib.dates import (DateFormatter, rrulewrapper, RRuleLocator, YEARLY)

# Generate random data and dates
data = np.random.randn(10000)
start = dt.datetime.strptime("2019-03-14", "%Y-%m-%d")
end = dt.datetime.strptime("2046-07-30", "%Y-%m-%d")
date = [start + dt.timedelta(days=x) for x in range(0, (end-start).days)]

rule = rrulewrapper(YEARLY, byeaster=1, interval=2)
loc = RRuleLocator(rule)
formatter = DateFormatter('%d/%m/%y')

fig, ax = plt.subplots()
ax.xaxis.set_major_locator(loc)
ax.xaxis.set_major_formatter(formatter)
ax.xaxis.set_tick_params(rotation=30, labelsize=10)
plt.plot(date, data)
ax.set_xlim(min(date), max(date))
plt.show()

那么您会得到:

enter image description here

有关更多信息,请参见matplotlib.pyplot.plot()