Время составления графика в 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]()