问题描述
我正在用python创建一个函数,该函数使我可以创建两个平行的图,并且它们共享两个轴:
def PlotManager(data1,data2,fig):
f,(ax1,ax2) = fig.subplots(2,1,sharey=True,sharex=True)
#Plot1 sopra
x_axis = data1.index
#Plot and shade the area between the upperband and the lower band grey
ax1.fill_between(x_axis,data1['Upper'],data1['Lower'],color = 'grey',alpha= 0.5)
#Plot the closing price and the moving average
ax1.plot(x_axis,data1['Close'],color = 'gold',lw = 3,label = 'Close Price',alpha= 0.5)
ax1.plot(x_axis,data1['SMA'],color = 'blue',label = 'Simple Moving Average',alpha= 0.5)
ax1.scatter(x_axis,data1['Buy'],color="green",lw=3,label="Buy",marker = "^",alpha=1)
ax1.scatter(x_axis,data1['Sell'],color="red",label="Sell",marker = "v",alpha = 1)
#Set the title and show the image
ax1.set_title("Bollinger Band for Amazon")
plt.xticks(rotation = 45)
#Plot 2 Sotto
ax2.set_title('RSI_Plot')
ax2.plot(x_axis,data2['RSI'])
ax2.axhline(0,linestyle='--',alpha=0.5,color="grey")
ax2.axhline(10,color="orange")
ax2.axhline(20,color="green")
ax2.axhline(30,color="red")
ax2.axhline(70,color="red")
ax2.axhline(80,color="green")
ax2.axhline(90,color="orange")
ax2.axhline(100,color="grey")
但是给了我cannot unpack non-iterable Axessubplot object
错误:
[Command: python -u C:\Users\Nicolò\Documents\Git\progettoTradingBot\progettoTradeBot\GUIprova2.py]
C:\Users\Nicolò\Documents\Git\progettoTradingBot\progettoTradeBot\BollingerBandsFinal.py:63: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a prevIoUs axes currently reuses the earlier instance. In a future version,a new instance will always be created and returned. Meanwhile,this warning can be suppressed,and the future behavior ensured,by passing a unique label to each axes instance.
ax = f.add_subplot(111)
C:\Users\Nicolò\Documents\Git\progettoTradingBot\progettoTradeBot\BollingerBandsFinal.py:63: MatplotlibDeprecationWarning: Adding an axes using the same arguments as a prevIoUs axes currently reuses the earlier instance. In a future version,by passing a unique label to each axes instance.
ax = f.add_subplot(111)
Traceback (most recent call last):
File "C:\Users\Nicolò\AppData\Local\Programs\Python\python38\lib\site-packages\matplotlib\cbook\__init__.py",line 196,in process
func(*args,**kwargs)
File "C:\Users\Nicolò\AppData\Local\Programs\Python\python38\lib\site-packages\matplotlib\animation.py",line 951,in _start
self._init_draw()
File "C:\Users\Nicolò\AppData\Local\Programs\Python\python38\lib\site-packages\matplotlib\animation.py",line 1743,in _init_draw
self._draw_frame(next(self.new_frame_seq()))
File "C:\Users\Nicolò\AppData\Local\Programs\Python\python38\lib\site-packages\matplotlib\animation.py",line 1766,in _draw_frame
self._drawn_artists = self._func(framedata,*self._args)
File "C:\Users\Nicolò\Documents\Git\progettoTradingBot\progettoTradeBot\GUIprova2.py",line 48,in animate
PlotManager(BollingerBands(df,f),RSI(df,f2),f)
File "C:\Users\Nicolò\Documents\Git\progettoTradingBot\progettoTradeBot\mostraGrafici.py",line 7,in PlotManager
f,sharex=True)
TypeError: cannot unpack non-iterable Axessubplot object
如何处理此错误?
解决方法
plt.subplots(2,1,...)
的值是一个元组figure,array(subplot0,subplot1)
,因此您可以正确地解压缩一个图形和两个子图。
相反,fig.subplots(2,...)
的值为subplot0,subplot1
(因为您已经有了这个数字……),而当您尝试打开包装时,它的值等同于
f = subplot0
ax0,ax1 = subplot1
这导致TypeError: cannot unpack non-iterable AxesSubplot object
由于下面没有使用标记为f
的对象,因此您应该编写
ax1,ax2 = fig.subplots(2,sharey=True,sharex=True)