2016-11-22 28 views
0

我有一個CSV文件,其中包含一些數據,我需要創建一個線圖,顯示CSV文件中每個日期和時間範圍沿着時間線的臨時變化以及temp每個記錄。Python繪圖數據更好地perspicitve

from matplotlib import pyplot, dates 
from csv import reader 
from dateutil import parser 

with open("C:\\Users\\Username\\Desktop\\temdata.csv","r") as f: 
    data = list(reader(f)) 

temp = [i[3] for i in data] 
time = [parser.parse(i[1]) for i in data] 

pyplot.title('Temperature changes over Time') 
pyplot.xlabel('Time/hours') 
pyplot.ylabel('Temperature') 
pyplot.plot(time, temp) 
pyplot.show() 

我得到這個可怕的縮放圖形不把數據放到角度來看它似乎更有意義,而不僅僅是如果在當溫度確實增加了次巨大漲幅。

我能夠在文件中放置一個虛擬記錄,使其認爲臨時溫度達到了300點,使其看起來好一點。

是否有任何方法對於Python初學者來說很簡單,並使用Python繪製數據來利用不同的方式縮放數據而不創建虛擬數據?

是否還有更強大的功能可以用於繪製和用Python繪圖以顯示一段時間內的溫度?

enter image description here

回答

2

兩種可能很容易的想法浮現在腦海中:

  1. 使用對數y軸顯示數據。與semilogy()替換您plot()項:

    pyplot.semilogy(time, temp) 
    
  2. 限制你的溫度上限,例如120:

    temp = [min(120, int(i[3])) for i in data] 
    

注意,我會避免使用time作爲變量,因爲這也是一個Python module名。

所以,你可以更新會是什麼樣子:

from matplotlib import pyplot, dates 
from csv import reader 
from dateutil import parser 

with open("input.csv","r") as f: 
    data = list(reader(f)) 

temp = [min(120, int(i[3])) for i in data] 
time = [parser.parse(i[1]) for i in data] 

pyplot.title('Temperature changes over Time') 
pyplot.xlabel('Time/hours') 
pyplot.ylabel('Temperature') 
pyplot.plot(time, temp) 
pyplot.show() 

給你: upper bound

+0

馬丁 - 謝謝你這些想法,非常好的信息。 #1並不是我所需要的,但它的尺寸看起來更好。我無法獲得#2的語法,所以我這麼做......'temp = [i [3] for i in data]''然後在下面我有'temp = [min(t,120)for t in temp]'並且它給了我這個錯誤'TypeError:unorderable types:int() SlickNutz

+0

試試這個:'temp = [min(i [3],120)for i in data]' –

+0

Martin - 我收到了同樣的錯誤,但是我想給你一個鏈接,以便你能夠抓住這個測試樣本數據,然後通過Python在您的身邊運行它,並使用我用來查看錯誤的實際數據。也許這會更好,所以你可以運行它。這裏是鏈接:https://justpaste.it/10oc4。我只是在我的問題和#2解決方案語法和變體中使用語法。如果你有時間,請告訴我,如果你知道問題可能是什麼。謝謝!! – SlickNutz