Время составления графика в Python с Matplotlib

У меня есть массив временных меток в формате (HH: MM: SS.mmmmmm) и другой массив чисел с плавающей запятой, каждый из которых соответствует значению в массиве timestamp.

Могу ли я построить время по оси x и числа по оси Y с помощью Matplotlib?

Я пытался, но почему-то он принимал только массивы поплавков. Как я могу заставить его заложить время? Мне нужно каким-либо образом изменить формат?

Ответ 1

Сначала вы должны преобразовать свои метки времени в объекты Python datetime (используйте datetime.strptime). Затем используйте date2num для преобразования дат в формат matplotlib.

Разделите даты и значения с помощью plot_date:

dates = matplotlib.dates.date2num(list_of_datetimes)
matplotlib.pyplot.plot_date(dates, values)

Ответ 2

Вы также можете построить парную метку, пары значений, используя pyplot.plot (после разбора их из строкового представления). (Протестировано с версиями matplotlib 1.2.0 и 1.3.1.)

Пример:

import datetime
import random
import matplotlib.pyplot as plt

# make up some data
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]

# plot
plt.plot(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()

plt.show()

Результирующее изображение:

Line Plot


Здесь то же самое, что и график рассеяния:

import datetime
import random
import matplotlib.pyplot as plt

# make up some data
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]

# plot
plt.scatter(x,y)
# beautify the x-labels
plt.gcf().autofmt_xdate()

plt.show()

Создает изображение, подобное этому:

Scatter Plot

Ответ 3

7 лет спустя, и этот код мне помог. Однако мои времена все еще не появлялись правильно.

enter image description here

Используя Matplotlib 2.0.0, и мне пришлось добавить следующий бит кода из Редактирование форматирования даты меток x-axis tick в matplotlib Paul H.

import matplotlib.dates as mdates
myFmt = mdates.DateFormatter('%d')
ax.xaxis.set_major_formatter(myFmt)

Я изменил формат на (% H:% M) и отображаемое время правильно. enter image description here

Все благодаря сообществу.

Ответ 4

У меня были проблемы с использованием версии matplotlib: 2.0.2. Завершив пример сверху, я получил центрированный набор пузырей.

graph with centered stack of bubbles

Я "исправил" проблему, добавив еще одну строку:

plt.plot([],[])

Весь фрагмент кода будет выглядеть следующим образом:

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


# make up some data
x = [datetime.datetime.now() + datetime.timedelta(minutes=i) for i in range(12)]
y = [i+random.gauss(0,1) for i,_ in enumerate(x)]

# plot
plt.plot([],[])
plt.scatter(x,y)

# beautify the x-labels
plt.gcf().autofmt_xdate()
myFmt = mdates.DateFormatter('%H:%M')
plt.gca().xaxis.set_major_formatter(myFmt)

plt.show()
plt.close()

Это создает изображение с распределенными пузырьками по желанию.

graph with bubbles distributed over time