我想绘制一个带有附加指标的烛台图,其中一个指标可以是所有的nan
。为此,我使用了名为mplfinance的python matplotlib实用程序。Mplfinance使用一个参数作为构建烛台的主要数据,第二个参数是一个具有附加指标值的数组。当我尝试实现一个自定义指示器时,我首先将一个填充了nan
的空列添加到包含指示器的数组中,然后使用一个条件将其填充到循环中。可能发生的情况是,整个列在循环结束后都保持为nan
,因此我得到了一个错误,无法绘制图形。
df = pd.DataFrame.from_dict(pd.json_normalize(newBars), orient='columns')
idf = df.copy()
idf = idf.iloc[:,[0]]
idf.columns = ['col0']
idf.assign(col1=float('nan')) # Now we add column #1
for i in range(len(idf)-1):
if a > b: # Some condition I use to calculate Col1
idf.iat[i, 1] = float_value
indicators = [
mpf.make_addplot(idf['Col0'],color='grey',width=1,panel=0),
mpf.make_addplot(idf['Col1'],color='g',type='scatter',markersize=50,marker='^',panel=0),
]
mpf.plot(df, type='candle', style='yahoo', volume=True, addplot=indicators,
figscale=1.1,figratio=(8,5), panel_ratios=(2,1))
从代码中可以看到,Col1可能都是nan
,在本例中,我得到了以下错误:
ValueError: zero-size array to reduction operation maximum which has no identity
我如何避免这个错误,并只绘制没有nan
列的图形,即使数组中存在这样的列?
发布于 2021-10-25 20:21:20
Mplfinance就是故意这样设计的。如果您将所有NaN数据传递给mpf.make_addplot()
,那么您实际上什么也不会说。在将make_addplot()
添加到addplot
指示器列表之前,您可以很容易地测试是否有任何数据。
是的,如果你可以只传递指示器而不必检查你的模型是否真的“指示”了什么,这可能会使你的代码变得更简单,然而(1)这将使mplfinance代码必须进行检查,增加(尽管非常轻微)维护mplfinance库的成本,以及(2)可能是你错误地传递了所有的NaN值,在这种情况下,如果mplfinance只是忽略了数据,你可能会花费大量的时间来调试,以确定为什么你的指示器没有出现在绘图上。
有关详细讨论,请参阅:https://github.com/matplotlib/mplfinance/issues/259#issuecomment-688429294
https://stackoverflow.com/questions/69712995
复制相似问题