2016-04-25 32 views
3

我想繪製一個燭臺圖表,使用Matplotlib和我爲REST API調用獲取的數據。然而,由於調用使用了唯一的訪問令牌,因此我已經下載了一個示例數據並將其加載到csv中以用於此問題。 Here is a pastebin link到樣本數據的樣子。爲了處理Python中的數據,我使用Pandas來創建數據框。這裏是我的代碼如下所示:Matplotlib燭臺(當日)圖是一個大Blob

import pandas as pd 
import matplotlib.pyplot as plt 
import matplotlib.ticker as mticker 
import matplotlib.dates as mdates 
from matplotlib.finance import candlestick_ohlc 
from datetime import date 

""" Pandas """ 
historic_df = pd.read_csv("sample_data.csv") 

dates = pd.to_datetime(historic_df['time'], format="%Y-%m-%dT%H:%M:%S.%fZ") 
openp = historic_df['openAsk'] 
highp = historic_df['highAsk'] 
lowp = historic_df['lowAsk'] 
closep = historic_df['closeAsk'] 

""" Matplotlib """ 
ax1 = plt.subplot2grid((1,1), (0,0)) 
ax1.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M:%S')) 

x = 0 
ohlc = [] 

while x < len(dates): 
    d = mdates.date2num(dates[x]) 
    append_me = d, openp.values[x], highp.values[x], lowp.values[x], closep.values[x] 
    ohlc.append(append_me) 
    x += 1 

candlestick_ohlc(ax1, ohlc, width=0.4, colorup='#77d879', colordown='#db3f3f') 
plt.show() 

這裏是我的輸出是什麼樣子:

enter image description here

可以排序的辨認出的垂直線的陰陽燭,不過酒吧好像真的很寬。關於如何解決這個問題的任何想法?謝謝。

+0

正常工作(使用每日數據),請發表您的實際數據。我所做的只是改變這一行:'日期= pd.to_datetime(historic_df ['時間'])'它看起來不錯。出於某種原因,它看起來像你試圖繪製多個天,每小時繪製1圖表,這將解釋重疊... – Matt

+0

我已經在我的帖子中包含一個鏈接到[pastebin](http:// pastebin .com/3Z26y9dA)與用於繪製我已經截圖的圖表的數據。不知道這是否會影響我的數據,因此每個條目都不是不同的一天,但更像是5-10秒。 – ng150716

回答

4

只要改變你的寬度在圖表上,這將是罰款:

candlestick_ohlc(ax1, ohlc, width=0.001, colorup='#77d879', colordown='#db3f3f')

使用您的數據測試,它看起來不錯。

+0

是這樣做的,無論如何,我可以自動調整寬度,因爲當我每天加載或不太細化的數據? – ng150716

+0

將pr轉換爲mpl使默認寬度更加智能可能會被接受。 – tacaswell

+0

對不起,我有點遲了,但你能詳細說明你的意思嗎? – ng150716

1

看來無證width的論點是candlestick_ohlc是關鍵。將它乘以每個數據點之間的一天的一小部分。因爲你的數據是在分鐘爲增量,這應該這樣做:

candlestick_ohlc(ax, tuples, width=.6/(24*60), colorup='g', alpha =.4); 

實現自動化,使用連續數據點的日期之間的差值。例如:

width=0.6/(mdates.date2num(dates[1])-mdates.date2num(dates[0])) 

注意這原來是一個常見問題,雖然鏈接不明顯。請參閱:一些雅虎數據