почему координаты x - это список меток времени, которые не отображаются в виде координат в matplotlib, когда мышь движется (при наведении курсора)? - PullRequest
0 голосов
/ 14 апреля 2020

это не отображается в правом нижнем углу тоже. Данные поступают из таблицы в базе данных. Он хорошо строит график, но координаты x отсутствуют при наведении курсора мыши на график. Пожалуйста помоги. Я использую mplcursors для наведения мыши.

import matplotlib.pyplot as plt
import mplcursors
from datetime import datetime

ax1 = plt.subplot(111)
time = ['2017-01-01 09:00:00.000', '2017-01-01 09:00:01.000', '2017-01-01 09:00:02.000', '2017-01-01 09:00:03.000', '2017-01-01 09:00:04.000', '2017-01-01 09:00:05.000', '2017-01-01 09:00:06.000', '2017-01-01 09:00:07.000', '2017-01-01 09:00:08.000', '2017-01-01 09:00:09.000', '2017-01-01 09:00:10.000']
lstDateTime = [str(datetime.strptime(x, '%Y-%m-%d %H:%M:%S.%f').isoformat(sep=' ', timespec='milliseconds')) for x in
               time]
print(f'lstDateTime: {", ".join(lstDateTime)}')
bet = [60.01, 60.01, 62.01, 61.01, 63.79, 69.28, 63.51, 62.24, 60.53, 61.53, 60.53]
prob = [61.1, 61.2, 63.03, 62.03, 64.02, 70.28, 64.51, 63.24, 61.53, 62.53, 61.53]
plt.plot_date(lstDateTime, bet, "b-", label="bet")
plt.plot_date(lstDateTime, prob, "g-", label="porb")
plt.tick_params(axis='x', rotation=90)
# ax1.plot(lstDateTime, bet, "b-", label="bet")
# ax1.plot(lstDateTime, prob, "g-", label="porb")
# ax1.tick_params(axis='x', rotation=90)
mplcursors.cursor(hover=True)
plt.show()

меня беспокоит то, что с самого начала я не вижу координаты x даже в правом нижнем углу карты matplotlib.

enter image description here

это то, чего я не понимаю. На оси x есть список отметок времени.

'2017-01-01 11:43:07.000', '2017-01-01 11:43:23.000', '2017-01-01 11:42:45.000' 

, но не отображается. Почему и как это исправить, мне нужно знать.

Проблема где-то здесь: - проблема в преобразовании времени.

lstDateTime = [str(datetime.strptime(x, '%Y-%m-%d %H:%M:%S.%f').isoformat(sep=' ', timespec='milliseconds')) for x in time] print(f'lstDateTime: {", ".join(lstDateTime)}')

но выдает правильный формат проблемы, если координаты x перестают отображаться.

1 Ответ

0 голосов
/ 18 апреля 2020

Как насчет этого. Возможно, вам придется использовать matplotlib даты .

Но, похоже, проблема с точностью, см. Тег hover. Существует метка времени, которой нет в данных.

import matplotlib.pyplot as plt
import mplcursors
from datetime import datetime

import matplotlib.dates as mdates
mdates.date2num

fig, ax = plt.subplots()
time = ['2017-01-01 09:00:00.000', '2017-01-01 09:00:01.000', '2017-01-01 09:00:02.000', '2017-01-01 09:00:03.000', '2017-01-01 09:00:04.000', '2017-01-01 09:00:05.000', '2017-01-01 09:00:06.000', '2017-01-01 09:00:07.000', '2017-01-01 09:00:08.000', '2017-01-01 09:00:09.000', '2017-01-01 09:00:10.000']

# to not use isoformat, use datetime objects
lstDateTime = [datetime.strptime(x, '%Y-%m-%d %H:%M:%S.%f') for x in
               time]

# convert to matplotlib date format
lstDateTime = mdates.date2num(lstDateTime)

#print(f'lstDateTime: {", ".join(lstDateTime)}')
bet = [60.01, 60.01, 62.01, 61.01, 63.79, 69.28, 63.51, 62.24, 60.53, 61.53, 60.53]
prob = [61.1, 61.2, 63.03, 62.03, 64.02, 70.28, 64.51, 63.24, 61.53, 62.53, 61.53]
ax.plot_date(lstDateTime, bet, "b-", label="bet")
ax.plot_date(lstDateTime, prob, "g-", label="porb")
plt.tick_params(axis='x', rotation=90)

ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y-%m-%d %H:%M:%S.%f'))

fig.autofmt_xdate()
mplcursors.cursor(hover=True)

plt.show()

enter image description here

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