2014-07-22 78 views
0

我有一個非常標準的數據集,包含2列,1個日期和1個值。我已經把他們分成兩個數組:在Python中繪製日期和值

dates 
['1/1/2014', '1/2/2014', '1/3/2014', ...] 

values 
[1423, 4321, 1234, ...] 

如何創建與x軸在y軸「價值」和「日期」的簡單線圖?

我已經試過:

我能做到在短短1號線只有 「值」 一個 「Hello World」 線圖(真棒):

import numpy as np 
import matplotlib.pyplot as plt 

plt.plot(values) 

接下來,讓我們添加「日期」爲x軸。此時我卡住了。如何將我的「日期」數組,即字符串轉換爲可繪製的數組?

看看例子,我相信我們應該將字符串轉換爲Python Date對象。讓我們導入這些庫:

import datetime 
import matplotlib.dates 

好了,所以現在我可以將一個字符串轉換成日期time.strptime(dates[1], '%m/%d/%Y')。我怎樣才能轉換整個陣列?我可以寫一個循環,但假設有一個更好的方法。

我不是100%確定我甚至在正確的道路上爲「日期」和「價值」做出可用的東西。如果你知道創建這個圖的代碼(一旦你知道Python +庫,我假設它是非常基本的),請讓我知道。

+0

可能重複(http://stackoverflow.com/questions/1574088/plotting-time-in-python- with-matplotlib) – moooeeeep

回答

0

請記住,您可以使用xticks並使用任何你想要的值代替。所以,你可以做一個

xVals = range(len(values)) 
plot(xVals, values) 
xticks(xVals, dates) 

這是可以的,如果你的日期是線性的就像你有。否則,你總是可以得到一個數字來量化日期(從第一天開始的天數(見datetime模塊),並使用xVals

+0

我假設你的意思是'plt.plot(xVals,values)'和'plt.xticks(xVals,dates)'。使用這些前綴運行上面的代碼將返回xtick對象的列表。還有更多嗎? –

+0

是的。 'plt.' ...'xticks'只會將刻度標籤放到您指定的值上。例如,在iPython上,打開一個'figure()'和'plot([1,2,3],[5,4,3])''。然後做一個'xticks([1,1.57])'看看會發生什麼。現在做一個'xticks([1,1.57],['1','$ \ pi/2 $'])'看看會發生什麼。它像魔術一樣工作。我總是對matplotlib感到驚訝。 – ssm

1

好的,知道這是一個班輪。它:

所以,你開始你的價值和日期(字符串)數組:

dates = ['1/1/2014', '1/2/2014', '1/3/2014', ...] 

values = [1423, 4321, 1234, ...] 

那麼把你的日期,這都是字符串爲日期對象:

date_objects = [datetime.strptime(date, '%m/%d/%Y').date() for date in dates] 

然後只是陰謀。

plt.plot(date_objects, values) 
0

所以這裏是我的代碼:[繪製在python時間matplotlib]的

date = [] 
for time_val in value: 
    date.append(datetime(*time.strptime(time_val, "%m/%d/%Y")[:3])) 

fig, ax = plt.subplots() 
ax.plot_date(date, value_list) 
date_format = mdates.DateFormatter("%m/%d/%Y") 
ax.xaxis.set_major_formatter(date_format) 
ax.autoscale_view() 
title_name = 'plot based on time' 
ax.set_title(title_name) 
y_label = 'values' 
ax.set_ylabel(y_label) 
ax.grid(True) 

fig.autofmt_xdate() 

plt.show()