Я хочу создать программу, которая будет следить за моим прогрессом в 5000 метров. Вдохновленный этим и этим , я пытался заставить его работать, комбинируя некоторые ответы без всякой удачи.
from __future__ import division
from matplotlib import pyplot as plt
from matplotlib.ticker import FuncFormatter
import matplotlib.dates as mdates
import numpy as np
import datetime as dt
def equidate_ax(fig, ax, dates, fmt="%d.%m.%Y", label="Date"):
N = len(dates)
def format_date(index, pos):
index = np.clip(int(index + 0.5), 0, N - 1)
return dates[index].strftime(fmt)
ax.xaxis.set_major_formatter(FuncFormatter(format_date))
ax.set_xlabel(label)
fig.autofmt_xdate()
def DistVel2Time(distance, velocity_kph):
velocity_ms = velocity_kph / 3.6
time_sec = distance / velocity_ms
hours = int(time_sec//3600)
minutes = int((time_sec%3600)//60)
seconds = int(time_sec%60)
return "{:02d}:{:02d}".format(minutes, seconds)
times = [DistVel2Time(a, b) for a, b in [(5000, 13), (5000, 15), (5000, 14)]]
dates = [dt.datetime(year, month, day) for year, month, day in [(2019,2,1), (2019,2,2), (2019,2,7)]]
fig_1, ax_1 = plt.subplots()
ax_1.plot(dates, times, 'o--')
ax_1.xaxis_date()
ax_1.xaxis.set_major_formatter(mdates.DateFormatter('%d.%m.%Y'))
#ax_1.yaxis_date()
#ax_1.yaxis.set_major_formatter(mdates.DateFormatter("%M:%S"))
fig_1.autofmt_xdate()
plt.show()
fig_2, ax_2 = plt.subplots()
ax_2.plot(dates, times, 'D--')
ax_2.xaxis_date()
ax_2.xaxis.set_major_formatter(mdates.DateFormatter('%d.%m.%Y'))
equidate_ax(fig_2, ax_2, dates)
plt.show()
fig_1.savefig('fig1.png')
fig_2.savefig('fig2.png')
Я украл equidate_ax
из @ascripter (из второй ссылки), потому что я хотел бы пропустить все даты, которые я не запускаю.
Если я запускаю этот фрагмент кода и сохраняю рисунки, я получаю следующие два довольно странных рисунка, поскольку ось Y не различает более низкие или более высокие значения (рисунки 1 и 2), и ось х на рисунке 2 повторяется.
Рисунок 1: fig_1
из кода выше.
Рисунок 2: fig_2
из кода выше.
- Почему неправильно отображается ось Y с точки зрения более низких или более высоких значений?
- Как я могу предотвратить повторение функции
equidate_ax
и пропустить нежелательные даты?
Если бы кто-нибудь мог помочь убрать мой беспорядок, я был бы благодарен.