如何在python中将字符串日期(YYYY-MM-DD)从SQL数据库转换为matplotlib日期?

问题描述 投票:1回答:1

我想为温度和日期数据库中的数据绘制图表。数据日期是字符串类型。我尝试使用date2num()函数将字符串类型转换为matplot日期。但是,在绘制图表时,我观察到日期以时间的形式显示。为什么会发生这种情况,我该怎么做才能在X轴上制作格式(YYYY-MM-DD)的日期?

import MySQLdb
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from dateutil import parser
from matplotlib import style
import datetime
def graph_data():
con =MySQLdb.connect("***.***.*.**","monitor", "password","temp")
cursor=con.cursor()
style.use('fivethirtyeight')
cursor.execute('select tdate,ttime,temperature from temptb')
rows=cursor.fetchall()
timenow=[]
temperature=[]
for eachRow in rows:
    temperature.append(eachRow[2])
    timenow.append(eachRow[0])
#dates=[mdates.date2num(t) for t in timenow]
fig=plt.figure()
ax1=fig.add_subplot(111)
ax1.set_title("Temperature Analysis")
ax1.set_ylabel("Temperature")
ax1.set_xlabel("Time")
#ax1.plot_date(dates, temperature, '-', label="tempurature", color='r')
ax1.plot_date(timenow, temperature, '-', label="tempurature", color='r')
fig.autofmt_xdate(rotation=60)
fig.tight_layout()
ax1.grid(True)
ax1.legend(loc='best', framealpha=0.5)
plt.savefig("figure.png")

graph_data()

从数据库获取的数据:2017-12-14 16 2017-12-14 17 2017-12-13 18 2017-12-14 18 2017-12-14 21 2017-12-13 22 2017-12-14 23 2017- 12-13 25 2017-12-14 26

输出:tempurature graph

编辑1:现在在ax1.plot_date(日期,温度,' - ',标签=“温度”,颜色='r')的日期使用时间输出没有变化

python mysql date matplotlib matplotlib.mlab
1个回答
0
投票

为什么你现在做日期= [mdates.date2num(t)for t]?

你有来自你的数据库的tdate?

我无法完全复制你的代码;但是,我假设你的数据库中的数据是这样回来的:2017-12-13,2017-12-14,2017-12-15enter image description here

如果这些格式是正确的

import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from dateutil import parser
from matplotlib import style
import datetime

timenow=["2017-12-15", "2017-12-14", "2017-12-13"]
temperature=[10,20,30]


fig=plt.figure()
ax1=fig.add_subplot(111)
ax1.set_title("Temperature Analysis")
ax1.set_ylabel("Temperature")
ax1.set_xlabel("Time")
ax1.plot_date(timenow, temperature, '-', label="tempurature", color='r')
fig.autofmt_xdate(rotation=60)
fig.tight_layout()
ax1.grid(True)
ax1.legend(loc='best', framealpha=0.5)
plt.savefig("figure.png")

我只想将ax1.plot_date(日期,温度,' - ',label =“tempurature”,color ='r')更改为我的示例中的内容。我可能会理解错误的问题,但我相信这很简单。

编辑:尝试在追加到你的timenow数组之前添加它。

import datetime
t = eachRow[0]


timenow.append(t.strftime('%m/%d/%Y'))
© www.soinside.com 2019 - 2024. All rights reserved.