Помогите с matplotlib
Я строю простой график, из 80 значению по x, и создаю тики при помощи plt.xticks(x, ticks) но
примерно только 5% тиков имеют смысл, отсальные просто пробелы, но несмотря на то что они прбелы, они ставляют эдакие палки на оси x. Можно как-то сделать так, чтобы эти черток было столько-же сколько и осмысленных дат
x = [i for i in range(80)]
y = [random.randint(0,20) for i in range(80)]
datas = [dt.datetime.now() + dt.timedelta(minutes = i*15) for i in range(80)]
ticks = []
last = datas[0]
for i in datas:
if i - last >= dt.timedelta(hours=2):
ticks.append(i.strftime("%H:%M"))
last = i
else:
ticks.append(" ")
plt.xticks(x, ticks)
plt.plot(x,y)
plt.show()
Ответы (2 шт):
Автор решения: Fox Fox
→ Ссылка
Вот некий пример для построения графика "из 80 значению по x". "отсальные прбелы" вроде отсутствуют и не "ставляют эдакие палки на оси x". "эти черток" столько, сколько меток на оси:
import matplotlib.pyplot as plt
# Данные
x = range(80)
y = [i**2 for i in x]
# Создание графика
fig, ax = plt.subplots()
ax.plot(x, y)
# Установка тиков и меток
ticks = [i for i in x if i % 10 == 0] # Только каждое 10-е значение
ax.set_xticks(ticks)
ax.set_xticklabels(ticks)
# Отображение графика
plt.show()
Автор решения: Stanislav Volodarskiy
→ Ссылка
Вы сами вставляете лишние тики, с пустыми подписями. Не вставляйте того чего не хотите видеть:
import datetime as dt
import random
import matplotlib.pyplot as plt
x = [i for i in range(80)]
y = [random.randint(0, 20) for i in range(80)]
datas = [dt.datetime.now() + dt.timedelta(minutes=i * 15) for i in range(80)]
ticks_x = []
ticks_labels = []
last = datas[0]
for i, j in zip(datas, x):
if i - last >= dt.timedelta(hours=2):
ticks_labels.append(i.strftime("%H:%M"))
ticks_x.append(j)
last = i
plt.xticks(ticks_x, ticks_labels)
plt.plot(x, y)
plt.show()