一、make_addplot的基本用法
在金融數據分析中,我們要通過數據可視化展示的不僅是’Open’, ‘High’, ‘Low’, 'Close’和最常見‘ma’,還有一些其他分析數據,那么就要用到make_addplot()方法了,make_addplot可以接受一個pandas、numpy、array以及list格式的數據(tuple不可以),和**kwargs參數;需要注意的是:傳遞給make_addplot的數據參數必須與將來畫圖傳遞給plot的數據參數行數相同,**kwargs參數將全部傳遞到polt方法中。
下面准備了一組數據,但是column有點長,不能全部輸出,這里分布輸出了數據的columns和一部分數據:
Index(['Open', 'High', 'Low', 'Close', 'Volume', 'UpperB', 'LowerB', 'PercentB'],
dtype='object')
Open High ... LowerB PercentB
Date ...
2011-07-01 132.089996 134.100006 ... 125.316073 1.219057
2011-07-05 133.779999 134.080002 ... 124.912703 1.066618
2011-07-06 133.490005 134.139999 ... 124.627085 0.992467
2011-07-07 135.160004 135.699997 ... 124.284986 1.026222
2011-07-08 133.830002 135.360001 ... 124.140890 0.885916
... ... ... ... ... ...
2012-06-25 132.050003 132.100006 ... 128.120436 0.381896
2012-06-26 131.699997 132.380005 ... 128.084306 0.470585
2012-06-27 132.419998 133.429993 ... 128.140042 0.605441
2012-06-28 132.289993 132.990005 ... 128.219241 0.551922
2012-06-29 135.199997 136.270004 ... 128.792993 0.921670
[252 rows x 8 columns]
add_plot = mplfinance.make_addplot(data['LowerB'])
mplfinance.plot(data, addplot=add_plot)
plt.show() # 顯示
得出結果
如果要給圖表添加多個數據繪制,直接用列表傳入make_addplot即可,例如:
add_plot = mplfinance.make_addplot(data[['UpperB', 'LowerB']])
mplfinance.plot(data, addplot=add_plot)
plt.show() # 顯示
得出結果
把數據分析的結果標記到圖像中
數據分析和可視化的目的是有分析結果,直接把結果展示的圖表上將更加直觀。先做個簡單的數據分析,並把分析結果賦值到兩個列表中,然后在繪圖時標記到圖表中,因為這里是標記,並非連續的線
,此時可以在make_addplot方法中使用marker,以及markersize和color設置標記的大小和顏色,這些參數都是直接傳遞給plot方法的。
def data_analyze(self, data: pandas.DataFrame):
"""
簡單的數據分析,並把返回數據分析結果列表,分析的邏輯不重要,主要看如何繪制到圖形中。
:param data:
:return:
"""
if data.shape[0] == 0:
data = self.data
s_list = []
b_list = []
b=-1
for i, v in data['High'].iteritems():
if v > data['UpperB'][i] and (b == -1 or b == 1):
b_list.append(data['Low'][i])
b = 0
else:
b_list.append(numpy.nan) # 這里添加nan的目的是,對齊主圖的k線數量
if data['Low'][i] < data['LowerB'][i] and (b == -1 or b == 0):
s_list.append(v)
b = 1
else:
s_list.append(numpy.nan)
return b_list, s_list
b_list, s_list = self.data_analyze(data)
add_plot = [
mpf.make_addplot(b_list, scatter=True, markersize=200, marker='^', color='y'),
mpf.make_addplot(s_list, scatter=True, markersize=200, marker='v', color='r'),
mpf.make_addplot(data[['UpperB', 'LowerB']])]
mpf.plot(data, type='candle', addplot=add_plot, volume=True)
plt.show() # 顯示
得出結果
在副圖中繪制
plot繪圖時是可以直接通過參數添加成交量副圖的,如果想在副圖中繪制數據可以在make_addplot中使用參數panel,直接上代碼:
def data_analyze(self, data: pandas.DataFrame):
"""
簡單的數據分析,並把返回數據分析結果列表,分析的邏輯不重要,主要看如何繪制到圖形中。
:param data:
:return:
"""
if data.shape[0] == 0:
data = self.data
s_list = []
b_list = []
b=-1
for i, v in data['High'].iteritems():
if v > data['UpperB'][i] and (b == -1 or b == 1):
b_list.append(data['Low'][i])
b = 0
else:
b_list.append(numpy.nan) # 這里添加nan的目的是,對齊主圖的k線數量
if data['Low'][i] < data['LowerB'][i] and (b == -1 or b == 0):
s_list.append(v)
b = 1
else:
s_list.append(numpy.nan)
return b_list, s_list
b_list, s_list = self.data_analyze(data)
add_plot = [
mpf.make_addplot(b_list, scatter=True, markersize=200, marker='^', color='y'),
mpf.make_addplot(s_list, scatter=True, markersize=200, marker='v', color='r'),
mpf.make_addplot(data[['UpperB', 'LowerB']]),
mpf.make_addplot(data['PercentB'], panel='lower', color='g', secondary_y='auto'),]
mpf.plot(data, type='candle', addplot=add_plot, volume=True)
plt.show() # 顯示
得出結果
這里注意的是副圖的左右兩側都有Y軸標,而且數據不同,因為mplfinance為完整展示圖像,自動分成了兩個坐標軸,如果你繪制的數據較多,這里有可能會報錯,如果出現這種情況,在使用plot繪制多組數據時需要使用參數secondary_y,有三個參數選項True, False, 和auto,默認是auto,因為繪制數據多出現報錯時只能設置secondary_y=true(使用Y軸標)或/False(不使用)來覆蓋,如果數據差異很大,設為False可能會導致看不到(實際上還是繪制了,只是在最頂上或最底下一條線看不清而已)。
修改主圖Y軸刻度位置和設置線形
在繪圖plot函數中使用關鍵字參數style='sas’可以把主圖Y左邊放到右邊,默認是‘default’,
設置線型是參數linestyle,直接上代碼吧,都是常用的參數:
def data_analyze(self, data: pandas.DataFrame):
"""
簡單的數據分析,並把返回數據分析結果列表,分析的邏輯不重要,主要看如何繪制到圖形中。
:param data:
:return:
"""
if data.shape[0] == 0:
data = self.data
s_list = []
b_list = []
b=-1
for i, v in data['High'].iteritems():
if v > data['UpperB'][i] and (b == -1 or b == 1):
b_list.append(data['Low'][i])
b = 0
else:
b_list.append(numpy.nan) # 這里添加nan的目的是,對齊主圖的k線數量
if data['Low'][i] < data['LowerB'][i] and (b == -1 or b == 0):
s_list.append(v)
b = 1
else:
s_list.append(numpy.nan)
return b_list, s_list
b_list, s_list = self.data_analyze(data)
add_plot = [鄭州人流醫院 http://www.0371zzkd.com/
mpf.make_addplot(b_list, scatter=True, markersize=200, marker='*', color='y'),
mpf.make_addplot(s_list, scatter=True, markersize=200, marker='s', color='r'),
mpf.make_addplot(data[['UpperB', 'LowerB']], linestyle='dashdot'),
mpf.make_addplot(data['PercentB'], panel='lower', color='g', secondary_y='auto'),
mpf.make_addplot(data['Adj Close'], color='b', linestyle='dotted', secondary_y=True)]
mpf.plot(data, type='candle', addplot=add_plot, volume=True, figscale=1.5, style='default')
plt.show() # 顯示
得出結果
這里需要注意的是style只能在plot方法中使用,不能在make_addplot方法中使用,而linestyle兩者都可以用。
二、marketcolors和mpf_style以及其他常用設置
marketcolors設置圖表顏色
"""
make_marketcolors() 設置k線顏色
:up 設置陽線柱填充顏色
:down 設置陰線柱填充顏色
:edge 設置蠟燭線邊緣顏色 'i' 代表繼承k線的顏色
:wick 設置蠟燭上下影線的顏色
:volume 設置成交量顏色
:inherit 是否繼承, 如果設置了繼承inherit=True,那么edge即便設了顏色也會無效
"""
my_color = mplfinance.make_marketcolors(up='cyan', down='red', edge='black', wick='black', volume='blue')
添加圖表樣式
這里的設置應該在plot方法之前設置,而設置完成marketcolors后需要使用mpf_style添加設置,最后plot()方法的關鍵字參數style=my_style 才會生效。下面添加mpf_style,最后一起展示效果。
"""
make_mpf_style() 設置mpf樣式
:gridaxis:設置網格線位置,both雙向
:gridstyle:設置網格線線型
:y_on_right:設置y軸位置是否在右
"""
my_style = mplfinance.make_mpf_style(marketcolors=my_color, gridaxis='both', gridstyle='-.', y_on_right=True)
這里要注意的是前面make_marketcolors的設置,必須這里作為關鍵字參數添加進來。其他幾項常用設置:title:設置標題;ylabel 設置主圖Y軸標題;ylabel_lower 設置成交量Y軸標題;savefig:導出圖片路徑以及文件名(包括后綴)。
最后一步繪圖:
b_list, s_list = self.data_analyze(data)
add_plot = [
mplfinance.make_addplot(b_list, scatter=True, markersize=200, marker='*', color='y'),
mplfinance.make_addplot(s_list, scatter=True, markersize=200, marker='s', color='r'),
mplfinance.make_addplot(data[['UpperB', 'LowerB']], linestyle='dashdot'),
mplfinance.make_addplot(data['PercentB'], panel='lower', color='g', secondary_y='auto'),
mplfinance.make_addplot(data['Adj Close'], color='b', linestyle='dotted', secondary_y=True)]
"""
plot繪圖的部分參數
:type設置圖像類型'ohlc'/'candle'/'line/renko'
:mav 繪制平局線
:show_nontrading= True 顯示非交易日(k線之間有間隔),False 不顯示交易日,k線之間沒有間隔
:title:設置標題
:ylabel=設置主圖Y軸標題
:ylabel_lower 設置成交量一欄Y坐標標題
:figratio:設置圖形縱橫比
:figscale 設置圖像的縮小或放大,1.5就是放大50%,最大不會超過電腦屏幕大小
:style 設置整個圖表樣式,可以使用前面設置的樣式my_style,只能在plot函數中使用指定整個圖表樣式,不能在make_addplot中使用。
savefig:導出圖片,填寫文件名及后綴
"""
mplfinance.plot(data, type='candle', addplot=add_plot, volume=True, figscale=1.5, style=my_style,title='****報價', figratio=(5, 5), ylabel='價格', ylabel_lower='成交量', savefig='my_image.png')
plt.show() # 顯示
最后得出結果。