The problem is difficult to comprehend, because things seem to work like they:
Snippet1
self.b_bands = bt.ind.BollingerBands()
self.rsi = bt.ind.RelativeStrengthIndex(period=self.params.rsi, upperband=70, lowerband=30)
Two (2) indicators are declared in the __init__ method of the Strategy and two (2) indicators show up in the char
BollingerBands which defaults to plotting along the data (because the values from this indicator are meant to be in line with the value)
RSI which defaults to be plotted on a subplot because it has fixed values ranging from 0 to 100
Snippet 2
# self.b_bands = bt.ind.BollingerBands()
self.rsi = bt.ind.RelativeStrengthIndex(period=self.params.rsi, upperband=70, lowerband=30)
self.bb = BBandsIndicator(mode=self.params.mode)
And again two (2) indicators there. The story of RSI is already known.
BBandsIndicator is a direct descendent of Indicator and like most indicators the default is to plot on a subplot
Both charts are ok