Информация о курсоре в matplotlib, кажется, зависит от разрешения Tick - как я могу изменить эту зависимость - PullRequest
0 голосов
/ 06 декабря 2018

С помощью matplotlib, как я могу увидеть точное значение курсора для значений даты в правом нижнем углу интерактивного графика?

Кажется, что это зависит от разрешения тиков:

следующий пример кода имеет другое разрешение тиков.Как результат, в правом нижнем углу снимков экрана значение курсора составляет 2020, один раз - 2020-09.

Я бы хотел, чтобы это было 2020-09-01 - так что именно с этим разрешением / детализацией данные имеют.

import datetime
import pandas as pd
import matplotlib
min_date = datetime.datetime.now().date()
max_date = min_date + datetime.timedelta(days=2*365)
date_range = [min_date + datetime.timedelta(days=x)
              for x in range(0, (max_date - min_date).days)]
df = pd.DataFrame(date_range)
yRange = range(df.shape[0])
df["y"] = yRange
df.columns = ["x","y"]
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
plt.plot(df["x"], df["y"], "-o", markersize=2)
plt.show()

axes = plt.gca()
import matplotlib.ticker as ticker
tick_spacing = 50
axes.xaxis.set_major_locator(ticker.MultipleLocator(tick_spacing))
plt.rcParams["figure.dpi"] = 200
plt.xticks(rotation=20)
plt.grid()
plt.plot(df["x"], df["y"], "-o", markersize=2)
plt.show()

monthly resolution

yearly resolution

1 Ответ

0 голосов
/ 06 декабря 2018

Чтобы отформатировать координату x для осей даты и времени иначе, чем фактический формат, используемый на осях, вы можете установить для атрибута Axes.fmt_xdata значение callable, которое занимает позицию и выводит желаемую строку.В этом случае

ax.fmt_xdata = lambda x: matplotlib.dates.num2date(x).strftime("%Y-%m-%d")

Пример:

from datetime import datetime
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

plt.plot([datetime.now(), datetime(2020,6,6)], [1,2], "-o")
plt.gca().fmt_xdata = lambda x: mdates.num2date(x).strftime("%Y-%m-%d")
plt.show()

enter image description here

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