2009-10-15 155 views
88

我有一個格式爲(HH:MM:SS.mmmmmm)的時間戳數組和另一個浮點數數組,每個數組對應於timestamp數組中的一個值。使用Matplotlib繪製Python的時間

我可以使用Matplotlib繪製x軸上的時間和y軸上的數字嗎?

我正在嘗試,但不知何故它只接受浮點數組。我怎樣才能得到它的時間?我需要以任何方式修改格式嗎?

回答

107

您必須先將時間戳轉換爲Python datetime對象(使用datetime.strptime)。然後使用date2num將日期轉換爲matplotlib格式。

疊加使用plot_date日期和值:

dates = matplotlib.dates.date2num(list_of_datetimes) 
matplotlib.pyplot.plot_date(dates, values) 
+1

它會繪製日期還是隻是時間?我只想把時間轉換爲日期時間,年份設置爲1990. – randomThought

+0

「...轉換爲日期時間,年份設置爲1990」:您可以發佈您用於從字符串轉換爲日期時間的代碼?轉換可能有問題。回覆。圖表標籤的格式,請參閱由J. K.Seppänen提供的date_demo1鏈接。 matplot lib文檔非常好,順便說一下。 http://matplotlib.sourceforge.net/index.html – codeape

+11

plot_dates - > matplotlib.pyplot.plot_date(日期,值) – Pete

52

您也可以使用pyplot.plot(從他們的字符串表示它們解析後)繪製的時間戳,值對。 (測試與matplotlib版本1.2.0和1.3.1。)

實施例:

import datetime 
import random 
import matplotlib.pyplot as plt 

# make up some data 
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)] 
y = [i+random.gauss(0,1) for i,_ in enumerate(x)] 

# plot 
plt.plot(x,y) 
# beautify the x-labels 
plt.gcf().autofmt_xdate() 

plt.show() 

得到的圖像:

Line Plot


下面是相同的散點圖:

import datetime 
import random 
import matplotlib.pyplot as plt 

# make up some data 
x = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(12)] 
y = [i+random.gauss(0,1) for i,_ in enumerate(x)] 

# plot 
plt.scatter(x,y) 
# beautify the x-labels 
plt.gcf().autofmt_xdate() 

plt.show() 

生成類似這樣的圖像:

Scatter Plot

+2

如何讓它工作散點圖? – andi

+4

@andi它應該像我的例子一樣工作(將'plot'更改爲'scatter')。 – moooeeeep

+1

我不明白爲什麼這是我遇到過的第五個問題,其中沒有人真正使用散點圖進行* TRIED * - 它不起作用。 '類型錯誤 - 無效類型提升'。 – dwanderson

2

7年後,這代碼已經幫助了我。 但是,我的時代仍然沒有正確顯示。

enter image description here

使用Matplotlib 2.0.0,我不得不從Editing the date formatting of x-axis tick labels in matplotlib由Paul H.

import matplotlib.dates as mdates 
myFmt = mdates.DateFormatter('%d') 
ax.xaxis.set_major_formatter(myFmt) 

添加以下代碼位,我改變了格式(%H:%M)和時間顯示正確。 enter image description here

都感謝社區。

1

我在使用matplotlib版本:2.0.2時遇到了麻煩。從上面運行示例,我得到了一組居中堆疊的氣泡。如所期望

import datetime 
import random 
import matplotlib.pyplot as plt 
import matplotlib.dates as mdates 


# make up some data 
x = [datetime.datetime.now() + datetime.timedelta(minutes=i) for i in range(12)] 
y = [i+random.gauss(0,1) for i,_ in enumerate(x)] 

# plot 
plt.plot([],[]) 
plt.scatter(x,y) 

# beautify the x-labels 
plt.gcf().autofmt_xdate() 
myFmt = mdates.DateFormatter('%H:%M') 
plt.gca().xaxis.set_major_formatter(myFmt) 

plt.show() 
plt.close() 

這產生具有分佈式氣泡的圖像:

plt.plot([],[]) 

的完整代碼段變爲:

graph with centered stack of bubbles

我通過添加另一行的 「固定」 的問題。

graph with bubbles distributed over time

+0

感謝您的更新版本。 – Aventinus