У меня есть массив временных меток в формате (ЧЧ: ММ: СС.мммммм) и другой массив чисел с плавающей запятой, каждое из которых соответствует значению в массиве временных меток.
Могу ли я отображать время по оси x и числа по оси y с помощью Matplotlib?
Я пытался, но почему-то он принимал только массивы значений с плавающей точкой. Как я могу заставить его отображать время? Нужно ли мне каким-либо образом изменять формат?
Использование plot_date не рекомендуется. Этот метод существует по историческим причинам и может устареть в будущем.
данные, подобные datetime, должны быть нанесены непосредственно с помощью plot.
Если вам нужно отобразить простые числовые данные в формате даты Matplotlib или необходимо установить часовой пояс, вызовите ax.xaxis.axis_date / ax.yaxis.axis_date перед построением графика. Смотрите Axis.axis_date.
Старый, устаревший ответ:
Сначала вы должны преобразовать свои временные метки в объекты Python datetime (используйте datetime.strptime). Затем используйте date2num для преобразования дат в формат matplotlib.
Вы также можете отобразить временные метки, пары значений с помощью pyplot.постройте график (после анализа их строкового представления). (Протестировано с 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 inrange(12)] y = [i+random.gauss(0,1) for i,_ inenumerate(x)]
# plot plt.plot(x,y) # beautify the x-labels plt.gcf().autofmt_xdate()
plt.show()
Результирующее изображение:
Это то же самое, что точечный график:
import datetime import random import matplotlib.pyplot as plt
# make up some data x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i inrange(12)] y = [i+random.gauss(0,1) for i,_ inenumerate(x)]
# plot plt.scatter(x,y) # beautify the x-labels plt.gcf().autofmt_xdate()
plt.show()
Создает изображение, подобное этому:
Ответ 3
Прошло 7 лет, и этот код помог мне. Однако мое время по-прежнему отображалось некорректно.
import matplotlib.dates as mdates myFmt = mdates.DateFormatter('%d') ax.xaxis.set_major_formatter(myFmt)
Я изменил формат на (% H:% M), и время отображается правильно.
Все благодаря сообществу.
Ответ 4
У меня возникли проблемы с этим при использовании matplotlib версии: 2.0.2. Запустив приведенный выше пример, я получил центрированный набор пузырьков.
Я "исправил" проблему, добавив еще одну строку:
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 inrange(12)] y = [i+random.gauss(0,1) for i,_ inenumerate(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()
Это создает изображение с пузырьками, распределенными по желанию.