使用具有 NaN 列的 mplfinance 在 Python 中绘制财务图表
Plotting a financial graph in Python with mplfinance having a NaN column
我想绘制一个带有附加指标的烛台图,其中一个指标可以是全部 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
列的图表?
Mplfinance 就是故意这样设计的。如果您将所有 NaN 数据传递给 mpf.make_addplot()
,您实际上是在说什么都不绘制。在将 make_addplot()
添加到 addplot
指标列表之前,您可以轻松测试是否有任何数据。
是的,如果您可以通过指标而不必检查您的模型是否实际“指示”任何东西,它可能会使您的代码更简单,但是 (1) 这将使 mplfinance 代码必须检查,增加(尽管非常略)维护 mplfinance 库的成本,以及 (2) 可能是您错误地传递了所有 NaN 值,在这种情况下,如果 mplfinance 只是忽略了数据,您可能会花费大量时间调试以确定您的指标为何不正确出现在地块上。
有关进一步讨论,请参阅:https://github.com/matplotlib/mplfinance/issues/259#issuecomment-688429294
我想绘制一个带有附加指标的烛台图,其中一个指标可以是全部 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
列的图表?
Mplfinance 就是故意这样设计的。如果您将所有 NaN 数据传递给 mpf.make_addplot()
,您实际上是在说什么都不绘制。在将 make_addplot()
添加到 addplot
指标列表之前,您可以轻松测试是否有任何数据。
是的,如果您可以通过指标而不必检查您的模型是否实际“指示”任何东西,它可能会使您的代码更简单,但是 (1) 这将使 mplfinance 代码必须检查,增加(尽管非常略)维护 mplfinance 库的成本,以及 (2) 可能是您错误地传递了所有 NaN 值,在这种情况下,如果 mplfinance 只是忽略了数据,您可能会花费大量时间调试以确定您的指标为何不正确出现在地块上。
有关进一步讨论,请参阅:https://github.com/matplotlib/mplfinance/issues/259#issuecomment-688429294