你是正确的,^{}返回一个^{}可映射/iterable对象的列表(可能是空的),你只是颠倒了顺序-你试图将温度场解析为日期。
并且您的values变量没有定义。在
试试这个:c.execute('SELECT temperature, humidity, feelslike, timenow FROM external')
data = c.fetchall()
# data[*][0] = temperature
# data[*][1] = humidity
# data[*][2] = feelslike
# data[*][3] = timenow
temperature = []
humidity = []
feelslike = []
timenow = []
for row in data:
temperature.append(row[0])
humidity.append(row[1])
feelslike.append(row[2])
timenow.append(parser.parse(row[3]))
另外,由于Row除了按索引访问还支持按列名映射访问,您可以执行以下操作:
^{pr2}$
然而,通过索引进行访问更快、更高效。在
对于绘图,需要多次调用plot,每次都使用相同的x和不同的y数据。为了测试,我生成了我的数据集:random.seed(0)
data = [(random.uniform(10, 25),
random.uniform(70, 99),
random.uniform(15, 30),
"2017-07-24 12:{:02d}:00.{:06d}".format(i, i * 1000 + int(random.uniform(0, 50)))
) for i in range(10)]
而不是使用数据库和data = c.fetchall()。在
现在您有了一组float数据点和关联的datetime.datetime对象。但是,matplotlib.axes.Axes.plot_date函数接受:x and/or y can be a sequence of dates represented as float days since
0001-01-01 UTC.
要将matplotlib的日期从datetime.datetime对象转换为float days,需要使用函数matplotlib.dates.date2num。在for row in data:
temperature.append(row[0])
humidity.append(row[1])
feelslike.append(row[2])
timenow.append(parser.parse(row[3]))
# Convert datetime.datetime to float days since 0001-01-01 UTC.
dates = [date2num(t) for t in timenow]
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.set_title("My environmental data")
# Configure x-ticks
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%d.%m.%Y %H:%M'))
# Plot temperature data on left Y axis
ax1.set_ylabel("Temperature [°C]")
ax1.plot_date(dates, temperature, '-', label="Temperature", color='r')
ax1.plot_date(dates, feelslike, '-', label="Feels like", color='b')
# Plot humidity data on right Y axis
ax2 = ax1.twinx()
ax2.set_ylabel("Humidity [% RH]")
ax2.plot_date(dates, humidity, '-', label="Humidity", color='g')
# Format the x-axis for dates (label formatting, rotation)
fig.autofmt_xdate(rotation=60)
fig.tight_layout()
# Show grids and legends
ax1.grid(True)
ax1.legend(loc='best', framealpha=0.5)
ax2.legend(loc='best', framealpha=0.5)
plt.savefig("figure.png")
此代码生成以下图像: