matplotlib를 사용하여 SQL(MariaDB)의 표 값 표시
두 개의 열 데이터를 추출하여 이 열 데이터를 값으로 사용하여 히스토그램을 matplotlib에 표시하려고 합니다.저는 Matplotlib에서 발견된 다음 답변을 면밀히 추적했습니다. SQL 쿼리 결과를 가능한 한 많이 플롯합니다. 몇 가지 측면만 다릅니다(예: 사용되는 SQL 모듈).스크립트가 실행되었지만 오류가 발생했습니다.
Traceback (most recent call last):
File "plot_script.py", line 22, in <module>
for row in result:
TypeError: 'NoneType' object is not iterable
내 파이썬 스크립트는 다음과 같습니다.
import mysql.connector as mariadb
import matplotlib as mpl
mpl.use('Agg')
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
mariadb_connection = mariadb.connect(user='user1', password='pw', database='sensordb')
cursor = mariadb_connection.cursor()
result=cursor.execute("SELECT time, voltage FROM sensortable")
#the data
data = []
xTickMarks = []
for row in result:
data.append(int(row[1]))
xTickMarks.append(str(row[0]))
mariadb_connection.close()
## necessary variables
ind = np.arange(len(data)) # the x locations for the groups
width = 0.35 # the width of the bars
## the bars
rects1 = ax.bar(ind, data, width,
color='black',
error_kw=dict(elinewidth=2,ecolor='red'))
# axes and labels
ax.set_xlim(-width,len(ind)+width)
ax.set_ylim(0,45)
ax.set_ylabel('Voltage')
ax.set_xlabel('Time')
ax.set_title('Sensor measurements')
ax.set_xticks(ind+width)
xtickNames = ax.set_xticklabels(xTickMarks)
plt.setp(xtickNames, rotation=45, fontsize=10)
plt.show()
fig.savefig('plot1.jpg')
업데이트:또한 SQL 쿼리에서 얻는 데이터를 확인하기 위해 다른 python 스크립트로 얻은 데이터를 인쇄했습니다.터미널 인쇄:Decimal('2479.00')), (u'13:15', Decimal('3182.00')), (u'13:20', Decimal('3076.00')), (u'13:25', Decimal('2795.00')), (u'13:30', Decimal('3457.00')), (u'13:35', Decimal('2515.00')), (u'13:40', Decimal('3006.00')), (u'13:45', Decimal('3618.00')), (u'13:50', Decimal('3857.00'))] (and more similar data).......)
이 '10진수' 데이터 유형이 문제의 원인일 수 있으므로 어떻게 해결해야 합니까?
파이썬 스크립트의 한 줄을 다음으로 수정했습니다.data.append(int(float(row[1])))
하지만 여전히 오류를 반환합니다.Traceback (most recent call last): File "test_select.py", line 19, in <module> data.append(int(float(row[1]))) TypeError: float() argument must be a string or a number
개체를 에 할당하지 않습니다.execute()
할당된 커서 개체를 호출하고 반복합니다.
cur = mariadb_connection.cursor()
cur.execute("SELECT time, voltage FROM sensortable")
data = []
xTickMarks = []
for row in cur.fetchall():
data.append(int(row[1]))
xTickMarks.append(str(row[0]))
언급URL : https://stackoverflow.com/questions/47959891/plot-table-values-from-sql-mariadb-with-matplotlib
'source' 카테고리의 다른 글
Spring Bean 범위: 세션 및 글로벌 세션 (0) | 2023.07.30 |
---|---|
objc_set Associated Object()란 무엇이며 어떤 경우에 사용해야 합니까? (0) | 2023.07.30 |
MockMVC를 사용한 통합 테스트 스프링 부트 (0) | 2023.07.30 |
최적화를 통해 손상된 인덱스이지만 검사 또는 분석을 통해 손상되지 않음 (0) | 2023.07.30 |
쉼표 연산자에서 'return', 'continue' 또는 'break'이 작동하지 않는 이유는 무엇입니까? (0) | 2023.07.30 |