1

我想绘制一个带有其他指标的烛台图,其中一个指标可以是 all 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即使数组中存在这样的列,如何避免此错误并仅绘制没有列的图形?

4

1 回答 1

2

Mplfinance 是故意这样设计的。如果您将所有 NaN 数据传递给mpf.make_addplot()您,则效果是什么都没有。make_addplot()在将指标添加到您的列表之前,您可以轻松地测试是否有任何数据addplot

是的,如果您可以只传递指标而不必检查您的模型是否真的“指示”了任何东西,它可能会使您的代码更简单,但是(1)这将使 mplfinance 代码必须检查,增加(尽管非常轻微)成本维护 mplfinance 库,以及 (2) 可能是您错误地传递了所有 NaN 值,在这种情况下,如果 mplfinance 只是忽略数据,您可能会花费大量时间进行调试以确定为什么您的指标未显示在绘图上.

如需进一步讨论,请参阅:https ://github.com/matplotlib/mplfinance/issues/259#issuecomment-688429294

于 2021-10-25T20:21:19.957 回答