用reportlab绘制sqlite3数据

2024-09-22 16:40:19 发布

您现在位置:Python中文网/ 问答频道 /正文

尝试从sqlite3数据库对简单的温度数据进行线条绘制。python新手,不知道我做错了什么。我的sql数据如下:

[(70.8,), (70.8,), (70.9,), (71.0,), (71.0,), (71.2,), (71.2,), (71.2,), (71.4,), (71.7,), (71.7,), (72.0,), (72.0,), (72.0,), (72.2,), (72.2,), (71.9,), (72.0,), (72.0,), (72.2,), (72.2,), (72.2,), (72.2,), (71.7,), (71.9,), (71.9,), (72.0,), (72.0,), (72.3,), (72.0,), (72.0,), (72.2,), (72.2,), (72.2,), (72.3,), (72.2,), (72.2,), (72.3,), (72.3,), (72.3,), (72.3,), (72.4,), (72.5,), (72.4,), (72.5,), (72.5,), (72.6,), (72.7,), (72.7,), (73.0,), (73.0,), (73.0,), (73.1,), (73.1,), (73.3,), (73.5,), (73.5,), (73.6,), (73.7,), (73.8,), (73.7,), (73.7,), (73.7,), (73.8,), (73.7,), (73.7,), (73.6,), (73.7,), (73.8,), (73.8,), (73.8,), (73.8,), (73.7,), (73.6,), (73.6,), (73.5,), (73.6,), (73.5,), (73.5,), (73.5,), (73.5,), (73.2,), (73.1,), (73.0,), (73.0,), (72.7,), (72.8,), (72.8,), (72.8,), (72.7,), (72.7,), (72.6,), (72.6,), (72.7,), (72.7,), (72.7,), (72.7,), (72.7,), (72.8,), (72.7,), (72.8,), (72.8,), (72.8,), (72.8,), (72.8,), (72.8,), (72.7,), (72.7,), (72.7,), (73.0,), (73.0,), (73.0,), (73.0,), (73.4,), (73.5,), (73.5,), (73.6,), (73.5,), (73.6,), (73.5,), (73.5,), (73.6,), (73.6,), (73.5,), (73.5,), (73.6,), (73.5,), (73.6,), (73.6,), (73.6,), (73.6,), (73.5,)]

我得到的错误消息是:

Traceback (most recent call last):
File "db-test5.py", line 93, in <module>
 renderPM.drawToFile(d, 'rework6.png')
File "/usr/lib/python2.7/dist-packages/reportlab/graphics/renderPM.py", line 655, in drawToFile
c = drawToPMCanvas(d, dpi=dpi, bg=bg, configPIL=configPIL,showBoundary=showBoundary)
File "/usr/lib/python2.7/dist-packages/reportlab/graphics/renderPM.py", line 641, in drawToPMCanvas 
draw(d, c, 0, 0, showBoundary=showBoundary)
File "/usr/lib/python2.7/dist-packages/reportlab/graphics/renderPM.py", line 50, in draw
R.draw(renderScaledDrawing(drawing), canvas, x, y, showBoundary=showBoundary)
File "/usr/lib/python2.7/dist-packages/reportlab/graphics/renderbase.py", line 199, in draw
self.drawNode(drawing)
File "/usr/lib/python2.7/dist-packages/reportlab/graphics/renderPM.py", line 109, in drawNode
self.drawNodeDispatcher(node)
File "/usr/lib/python2.7/dist-packages/reportlab/graphics/renderbase.py", line 280, in drawNodeDispatcher
self.drawGroup(node)
File "/usr/lib/python2.7/dist-packages/reportlab/graphics/renderbase.py", line 297, in drawGroup
node = _expandUserNode(node,canvas)
File "/usr/lib/python2.7/dist-packages/reportlab/graphics/renderbase.py", line 161, in _expandUserNode
node = node.provideNode()
File "/usr/lib/python2.7/dist-packages/reportlab/graphics/widgetbase.py", line 150, in provideNode
return self.draw()
File "/usr/lib/python2.7/dist-packages/reportlab/graphics/charts/lineplots.py", line 351, in draw
self.calcPositions()
File "/usr/lib/python2.7/dist-packages/reportlab/graphics/charts/lineplots.py", line 194, in calcPositions
if isinstance(datum[0],str):
TypeError: 'float' object has no attribute '__getitem__'

我的代码是:

^{pr2}$

它就像每次我传递坏数据一样,在renderrpm时它就会崩溃,但我很难理解错误。我的预感是我传递的数据不适合直线图?

非常感谢任何帮助。。。。。。


Tags: inpyselfnodelibpackagesusrdist
1条回答
网友
1楼 · 发布于 2024-09-22 16:40:19

在浏览了报告实验室文档并对它们的示例进行了实验之后,我确定问题出在数据的呈现方式上。使用reportlab文档中的示例数据,我能够消除调用renderrpm时遇到的错误。在

然后根据穆罕默德·哈西卜·汗和保罗·鲁尼在这本书中的帮助

通过将about代码修改为:

c.execute("SELECT {idf} FROM {tn} WHERE {cnn}='Kitchen' AND {cn} BETWEEN '18:00:00' AND '23:59:59'".\
format(idf="temp", time="read_ID", tn=table_name, cnn="sensor_name",        
cn="recorded_time"))
all_date_times = c.fetchall()
print "readings from 6 pm to midnight = ", len(all_date_times)

level1 = [list(row) for row in all_date_times]

level2=[i[0] for i in all_date_times]

level3=[tuple(level2)]


#### build report lab chart

drawing = Drawing(600, 400)
data = level3
lc = HorizontalLineChart()
lc.x = 25
lc.y = 25
lc.height = 450
lc.width = 550
lc.data = data
lc.joinedLines = 1
lc.valueAxis.valueMin = 70
lc.valueAxis.valueMax = 75
drawing.add(lc)
renderPM.drawToFile(drawing, 'chartgraphicfile.png')

相关问题 更多 >