График в Python

Делаю бота который каждую минуту пингует сервер и записывает это в файл, сейчас у меня в файле с которого нужно делать график выглядит вот так:

{
  "players_online": [
    818,
    818,
    0,
    818,
    818,
    818,
    818,
    818,
    818,
    818,
    818,
    818,
    818,
    818
  ],
  "timestamps": [
    "15:51",
    "15:52",
    "15:53",
    "15:54",
    "15:55",
    "15:56",
    "15:57",
    "15:58",
    "15:59",
    "16:00",
    "16:01",
    "16:02",
    "16:03",
    "16:04"
  ]
}

И я хочу получить примерно следующий результат, но у меня не получается сделать время которое под графиком как на скриншоте ниже (Время находиться под графиком). Если кто подскажет как это реализовать буду благодарен, спасибо.

(Вставил больше картинок, чтобы было понятнее т.к я не совсем понимаю как это называется)

введите сюда описание изображения

введите сюда описание изображения введите сюда описание изображения


Ответы (2 шт):

Автор решения: CrazyElf

Примерный пример. Не очень красивый, но примерно в ту степь:

import pandas as pd
import matplotlib.dates as mdates

data = {
  "players_online": [
    81,
    88,
    0,
    81,
    18,
    88,
    81,
    18,
    88,
    81,
    18,
    88,
    81,
    18
  ],
  "timestamps": [
    "10:51",
    "11:52",
    "12:53",
    "13:54",
    "14:55",
    "15:56",
    "16:57",
    "17:58",
    "18:59",
    "19:00",
    "20:01",
    "21:02",
    "22:03",
    "23:04"
  ]
}

df = pd.DataFrame(data)
df['time'] = pd.to_datetime(df.timestamps, format='%H:%M')
df.set_index(['time'],inplace=True)
ax = df.plot.area()
ax.set(xlabel="time", ylabel="players_online")
ax.set_xlim(df.index[0], df.index[-1])
ax.xaxis.set_major_locator(mdates.HourLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter("%H:%M"))
ax.tick_params(axis="x", rotation=45)

введите сюда описание изображения

→ Ссылка
Автор решения: Artyom Zaborschicov

Данная задача легко решается с помощью библиотеки matplotlib. Решение выглядит так:

from matplotlib import pyplot as plt
data = { "players_online": [546, 485, 490, 511, 511, 533, 520, 543, 599, 576, 560, 631, 653, 586],
"timestamps": ["15:51", "15:52", "15:53", "15:54", "15:55", "15:56", "15:57", "15:58", "15:59", "16:00", "16:01", "16:02", "16:03", "16:04"]
}

plt.plot(data['timestamps'], data['players_online']) # первый аргумент - координата по оси абсцисс (x), второй - по оси ординат (y)
plt.fill_between(data['timestamps'], data['players_online'], color="blue", alpha=0.35) # первый и второй аргумент - всё так же, color - цвет (как он задаётся можно прочитать в документации matplotlib), второй - прозрасность 
plt.show() # вывод информации на экран

Скриншот графика

Категорически рекомендую изучить вам документацию matplotlib, seaborn и, возможно, будет полезно изучить pandas. С помощью неё вы научитесь делать крутую визуальизацию данных. Также, вероятно вам будет интересен plotly, т.к. он делает интерактивные графики. Удачи в ваших проектах!

→ Ссылка