Я хочу создать график данных о температуре и времени из базы данных MySQL. Используя matplotlib
и pandas
с python3
на raspbian
Я пытаюсь вставить температуру по оси Y и время по оси X.
Ось Y работает нормально, она отображает временные значения (float
) без каких-либо проблем. Однако, когда я пытаюсь добавить время (time
), он выводит ошибочные данные, которые я предполагаю, потому что у него другой тип данных. Если я использую другой столбец, такой как ID (int
), то это работает. Я не уверен, нужно ли мне преобразовывать время в строку или есть другой способ обойти это.
Ответ может лежать в Изменить тип данных столбцов в Pandas , который кажется похожим, но поскольку я вставляю данные из MySQL, я не уверен, как можно применить их к своей проблеме.
Моя конечная цель - создать задание cron, которое будет запускаться каждые пять минут и выводить линейный график на основе изображений с временными значениями за последние 24 часа по оси Y и значениями time
вдоль оси X, а затем копировать его в мою папку WWW для отображения через HTML. Я знаю, что в сценарии ничего не хватает после вывода изображения, но это легко, и я делал это раньше. Я просто не могу заставить график отображать значения времени по оси X.
Буду признателен за любую помощь.
import matplotlib.pyplot as plt
import pandas as pd
import MySQLdb
def mysql_select_all():
conn = MySQLdb.connect(host='localhost',
user='user',
passwd='password',
db='database')
cursor = conn.cursor()
sql = "SELECT id,time,date,temperature FROM table ORDER BY id DESC LIMIT 288"
cursor.execute(sql)
result = cursor.fetchall()
df = pd.DataFrame(list(result),columns=["id","time","date","temperature"])
x = df.time
y = df.temperature
plt.title("Temperature Data from Previous 24 Hours", fontsize="20")
plt.plot(x, y)
plt.xlabel("Time")
plt.ylabel("Temperature (\u2103)")
plt.tick_params(axis='both',which='major',labelsize=14)
plt.savefig('test.png')
cursor.close()
print("Start")
mysql_select_all()
print("End")
Приведенный выше код в настоящее время выводит изображение ниже.



Первая и последняя строки из фрейма данных
id 688
time 0 days 09:55:01
date 2019-01-24
temperature 27.75
Name: 0, dtype: object
id 401
time 0 days 10:00:01
date 2019-01-23
temperature 24.4
Name: 287, dtype: object