2017-12-16 6 views
1

온도 및 날짜 데이터베이스에있는 데이터 그래프를 그려보고 싶습니다. 데이터 날짜는 문자열 유형입니다. 문자열 형식을 date2num() 함수를 사용하여 matplot date로 변환하려고했습니다. 그러나 그래프를 그릴 때 시간이 시간의 형태로 표시되는 것을 관찰했습니다. 왜 이런 일이 벌어지고 있으며 X 축에서 날짜 형식을 지정하려면 (YYYY-MM-DD) 어떻게해야합니까? 데이터베이스로부터 페치SQL 데이터베이스에서 Python으로 matplotlib 날짜로 문자열 날짜 (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 2,017 -12-13 22 2017년 12월 14일 23 2017년 12월 13일 25 2017년 12월 14일 26

출력 : tempurature graph

,536,913,632 10

편집 1 : 를 사용하지만 출력에 변화가 없다 timenow ax1.plot_date에서 날짜의 장소 (날짜, 온도, '-', 라벨 = "tempurature", 컬러 = 'R')에서

+0

날짜 또는 시간을 플로팅 하시겠습니까? 같은 날에 많은 점수를 얻었던 날짜 만 플롯하는 것처럼 보입니다. 그게 바람직 할까? – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnest 예, 지금은 충분합니다. –

+0

그렇다면 무엇이 잘못 될지 이해하지 못합니다. 'ax1.plot (timenow, temperature)'를 사용하는 것만으로 정확하게 날짜 라벨이있는 플롯을 제공해야합니다. – ImportanceOfBeingErnest

답변

0

왜 날짜 = [mdates.date2num (t) in timenow]입니까?

DB에서 오셨습니까?

코드를 완전히 복제 할 수 없습니다. 그러나, 나는 당신의 데이터베이스에서 데이터를 가정하고 지금처럼 돌아오고있다 : 이러한 형식이 올바른 경우 2017년 12월 13일, 2017년 12월 14일, 2017년 12월 15일 enter 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 (dates, temperature, '-', label = "tempurature", color = 'r') 만 변경하려고합니다. 나는 틀린 질문을 이해하고 있을지도 모르다. 그러나 나는 그것이 꽤 곧은 것을 믿는다.

편집 : 타임 라인 배열에 추가하기 전에 이것을 추가하십시오.

import datetime 
t = eachRow[0] 


timenow.append(t.strftime('%m/%d/%Y')) 
+0

고마워요.하지만 당신이 말했듯이 출력에 변화가 없습니다. –

+0

당신 timenow 배열을 인쇄하고 볼 수 있도록 게시 할 수 있습니까? – wdlax11

+0

여기 timenow 배열 [datetime.date (2017, 12, 14), datetime.date (2017, 12, 14), datetime.date (2017, 12, 13), datetime.date (2017, 12, 14 datetime.date (2017, 12, 14), datetime.date (2017, 12, 13), datetime.date (2017, 12, 14), datetime.date (2017, 12, 13) 2017, 12, 14)] –