我正试图显示一个包含自动收报机的 Dataframe 的单独绘图。dataframe有5个代码,即来自纳斯达克的5家公司使用yahoofinance。
下面是all_data
Dataframe 的样子:
signal short_mavg long_mavg positions
Ticker Date
AAPL 2020-01-02 0.0 75.087502 75.087502 NaN
2020-01-03 0.0 74.722500 74.722500 0.0
2020-01-06 0.0 74.798332 74.798332 0.0
2020-01-07 0.0 74.748125 74.748125 0.0
2020-01-08 0.0 74.958000 74.958000 0.0
打印图的代码如下所示
fig = plt.figure()
# Add a subplot and label for y-axis
ax1 = fig.add_subplot(111, ylabel='Price in $')
# Plot the closing price
all_data['Close'].plot(ax=ax1, color='r', lw=2.)
# Plot the short and long moving averages
signals[['short_mavg', 'long_mavg']].plot(ax=ax1, lw=2.)
# Plot the buy signals
ax1.plot(signals.loc[signals.positions == 1.0].index,
signals.short_mavg[signals.positions == 1.0],
'^', markersize=10, color='m')
# Plot the sell signals
ax1.plot(signals.loc[signals.positions == -1.0].index,
signals.short_mavg[signals.positions == -1.0],
'v', markersize=10, color='k')
# Show the plot
plt.show()
错误出现在ax1.plot(signals.loc[signals.positions == 1.0].index, signals.short_mavg[signals.positions == 1.0], '^', markersize=10, color='m')
行
误差为TypeError: 'value' must be an instance of str or bytes, not a tuple
帮助创建每个股票代码的个人图表将不胜感激。谢谢!!!
1条答案
按热度按时间l7mqbcuq1#
我不认为这是
matplotlib
的问题。看起来df
有多个索引。在这种情况下,您应该首先选择正确的索引,而不是使用
signals.loc[signals.positions == -1.0].index
作为x坐标,您可以使用signals.loc[signals.positions == -1.0].index.get_level_values(1)
(检查这实际上是日期)。同样,在绘图之前,尝试打印您试图绘制的值,以查看是否有奇怪的东西。例如,你要确保x和y实际上是列表,一系列数字,而不是元组的列表。