From 220b69338ea0833aa7e8ab9c4d6b9a2d83e5db0c Mon Sep 17 00:00:00 2001 From: Adriana Miyazaki Date: Mon, 22 Nov 2021 12:05:37 -0300 Subject: [PATCH 1/2] Update plotting.py Add possibility to plot multiple candle plots with different colors, using make_marketcolors with make_addplot function. The code is from DanielGoldfarb, and it's on website: https://gitmemory.com/DanielGoldfarb --- src/mplfinance/plotting.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/mplfinance/plotting.py b/src/mplfinance/plotting.py index c6cccc0b..0b986bb9 100644 --- a/src/mplfinance/plotting.py +++ b/src/mplfinance/plotting.py @@ -858,7 +858,15 @@ def _addplot_collections(panid,panels,apdict,xdates,config): if not isinstance(apdata,pd.DataFrame): raise TypeError('addplot type "'+aptype+'" MUST be accompanied by addplot data of type `pd.DataFrame`') d,o,h,l,c,v = _check_and_prepare_data(apdata,config) - collections = _construct_mpf_collections(aptype,d,xdates,o,h,l,c,v,config,config['style']) + + mc = apdict['marketcolors'] + if isinstance(mc,dict): + apstyle = config['style'].copy() + apstyle['marketcolors'] = mc + else: + apstyle = config['style'] + + collections = _construct_mpf_collections(aptype,d,xdates,o,h,l,c,v,config,apstyle) if not external_axes_mode: lo = math.log(max(math.fabs(np.nanmin(l)),1e-7),10) - 0.5 @@ -1087,7 +1095,10 @@ def _valid_addplot_kwargs(): 'Validator' : lambda value: _yscale_validator(value) }, 'stepwhere' : { 'Default' : 'pre', - 'Validator' : lambda value : value in valid_stepwheres }, + 'Validator' : lambda value : value in valid_stepwheres }, + + 'marketcolors' : { 'Default' : None, # use 'style' for default, instead. + 'Validator' : lambda value: isinstance(value,dict) }, } _validate_vkwargs_dict(vkwargs) From 307096e6fc9434ae9d0ea94c618b4c4da23a1c83 Mon Sep 17 00:00:00 2001 From: Daniel Goldfarb Date: Tue, 14 Dec 2021 14:25:52 -0500 Subject: [PATCH 2/2] finish up `marketcolors` kwarg for make_addplot() --- examples/scratch_pad/iss466_pr471.py | 14 ++++++++++++++ src/mplfinance/_version.py | 2 +- src/mplfinance/plotting.py | 6 +++--- 3 files changed, 18 insertions(+), 4 deletions(-) create mode 100644 examples/scratch_pad/iss466_pr471.py diff --git a/examples/scratch_pad/iss466_pr471.py b/examples/scratch_pad/iss466_pr471.py new file mode 100644 index 00000000..89aadf92 --- /dev/null +++ b/examples/scratch_pad/iss466_pr471.py @@ -0,0 +1,14 @@ +import pandas as pd +import mplfinance as mpf + +aapldf = pd.read_csv('../data/yahoofinance-AAPL-20040819-20180120.csv',index_col=0,parse_dates=True).iloc[-61:-1] +googdf = pd.read_csv('../data/yahoofinance-GOOG-20040819-20180120.csv',index_col=0,parse_dates=True).iloc[-61:-1] + +mcblue = mpf.make_marketcolors(base_mpf_style='default',up='b',down='b',ohlc='b') +mcgreen = mpf.make_marketcolors(base_mpf_style='default',up='limegreen',down='limegreen',ohlc='limegreen') + +sblue = mpf.make_mpf_style(base_mpf_style='default',marketcolors=mcblue) + +ap = mpf.make_addplot(googdf,type='candle',marketcolors=mcgreen) +mpf.plot(aapldf,type='candle',style=sblue,returnfig=True,addplot=ap) +mpf.show() diff --git a/src/mplfinance/_version.py b/src/mplfinance/_version.py index 1d141451..4b58f268 100644 --- a/src/mplfinance/_version.py +++ b/src/mplfinance/_version.py @@ -1,5 +1,5 @@ -version_info = (0, 12, 8, 'beta', 5) +version_info = (0, 12, 8, 'beta', 6) _specifier_ = {'alpha': 'a','beta': 'b','candidate': 'rc','final': ''} diff --git a/src/mplfinance/plotting.py b/src/mplfinance/plotting.py index e6f69e5f..de29ec73 100644 --- a/src/mplfinance/plotting.py +++ b/src/mplfinance/plotting.py @@ -39,7 +39,7 @@ from mplfinance._arg_validators import _alines_validator, _tlines_validator from mplfinance._arg_validators import _scale_padding_validator, _yscale_validator from mplfinance._arg_validators import _valid_panel_id, _check_for_external_axes -from mplfinance._arg_validators import _xlim_validator, _mco_validator +from mplfinance._arg_validators import _xlim_validator, _mco_validator, _is_marketcolor_object from mplfinance._panels import _build_panels from mplfinance._panels import _set_ticks_on_bottom_panel_only @@ -867,7 +867,7 @@ def _addplot_collections(panid,panels,apdict,xdates,config): d,o,h,l,c,v = _check_and_prepare_data(apdata,config) mc = apdict['marketcolors'] - if isinstance(mc,dict): + if _is_marketcolor_object(mc): apstyle = config['style'].copy() apstyle['marketcolors'] = mc else: @@ -1115,7 +1115,7 @@ def _valid_addplot_kwargs(): 'Validator' : lambda value : value in valid_stepwheres }, 'marketcolors' : { 'Default' : None, # use 'style' for default, instead. - 'Validator' : lambda value: isinstance(value,dict) }, + 'Validator' : lambda value: _is_marketcolor_object(value) }, } _validate_vkwargs_dict(vkwargs)