Добавление форматированных дат в виде xticks в Matplotlib - PullRequest
0 голосов
/ 14 марта 2019

Я пытаюсь добавить список дат в 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 голосов
/ 14 марта 2019

Способ сделать это - передать массив date вместе с массивом data в методе plot. То есть с приведенным примером это будет:

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 () для получения дополнительной информации.

0 голосов
/ 14 марта 2019

Скорее всего, ваши данные отображаются, но не в правильном месте.Если вы пойдете по этому примеру , вам нужно добавить что-то вроде fig.autofmt_xdate() в ваш код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...