Допустим, что есть временные ряды, которые я хочу построить в Matplotlib:Подробная дата в курсоров поз на pyplot графиках
dates = pd.date_range(start='2011-01-01', end='2012-01-01')
s = pd.Series(np.random.rand(1, len(dates))[0], index=dates)
с графическим интерфейсом пользователя движки в Matplotlib есть эта приятная особенность, что они показывают координаты курсора в окне , Когда я сюжет панды серии, используя свой метод участок(), как это:
fig = plt.figure()
s.plot()
fig.show()
х Coords курсора отображаются в полном гггг-мм-дд в нижней части окна, как вы можете видеть на рис 1.
Однако, когда я сюжет той же серии s с pyplot:
fig = plt.figure()
plt.plot(s.index, s.values)
fig.show()
полные даты показаны только тогда, когда я увеличивать и уменьшать в виду по умолчанию я могу только с ee Mon-yyyy (см. рис. 2), и я увижу только год, если серия будет длиннее.
В моем проекте есть функции для рисования графиков сложной, серии из данных временных рядов с использованием plt.plot(), поэтому, когда я просмотреть результаты в графическом интерфейсе я вижу только полные даты в крупным планом. Я использую ipython3 v 4.0, и я в основном работаю с Mac OSX, но я пытался использовать TK, Qt и GTK на Linux без каких-либо различий в поведении.
До сих пор у меня есть 2 идеи о том, как получить полные даты, отображаемые в графическом интерфейсе на любом уровне масштабирования:
- переписывают plt.plot() в pd.Series.plot()
- используйте обработчик события canvas для получения x-координаты из курсора pos и распечатайте его где-нибудь
Однако, прежде чем я попытаюсь выполнить любое из вышеперечисленных вопросов, мне нужно знать наверняка, есть ли более быстрый способ получить полные даты напечатан в окне графика. Я предполагаю, что есть, потому что панды использует его, но я не мог найти его в pyplot документы или примеры или в другом месте в Интернете, и это не ни один из этих 2 звонков:
ax.xaxis_date()
fig.autofmt_xdate()
Кто-нибудь, пожалуйста, сообщите.
Работает хорошо, спасибо. Третий и второй последний могут быть фактически записаны в одну строку, если ничего не нужно делать с осями, то есть .: 'plt.gca(). Axes.fmt_xdata = lambda x: num2date (x) .strftime ('% Y -% m-% d ') ' – mac13k
Спасибо, объединили линии. – wrwrwr
На боковой ноте это похоже на несколько подзаговоров, которые должны быть установлены для каждого подзаголовка на рисунке. Если вы вызываете один раз перед 'plt.show()', он влияет только на последний подзаговор. – mac13k