我想为温度和日期数据库中的数据绘制图表。数据日期是字符串类型。我尝试使用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
编辑1:现在在ax1.plot_date(日期,温度,' - ',标签=“温度”,颜色='r')的日期使用时间输出没有变化
为什么你现在做日期= [mdates.date2num(t)for t]?
你有来自你的数据库的tdate?
我无法完全复制你的代码;但是,我假设你的数据库中的数据是这样回来的:2017-12-13,2017-12-14,2017-12-15
如果这些格式是正确的
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'))