如何在Python Matplotlib子图中将DATA列设为x轴
解决方法
你只需要在调用plot()时明确指定x轴为self.signals['DATA']即可,由于两个子图共享x轴,设置好第一个子图的x轴后,第二个会自动同步。修改后的代码如下:
def plot(self): plt.figure(figsize=(20, 5)) ax1 = plt.subplot(211) # 明确指定x轴为DATA列,y轴为CLOSE列 ax1.plot(self.signals['DATA'], self.signals['CLOSE']) ax1.set_title('Price') # 旋转x轴标签避免重叠 ax1.tick_params(axis='x', rotation=45) ax2 = plt.subplot(212, sharex=ax1) ax2.set_title('RSI') # 同样指定x轴为DATA列 ax2.plot(self.signals['DATA'], self.signals['RSI']) ax2.axhline(30, linestyle='--', alpha=0.5, color='#ff0000') ax2.axhline(70, linestyle='--', alpha=0.5, color='#ff0000') plt.tight_layout() # 调整布局避免标签被截断 plt.show()
另外还有一种可选方案:将DATA列设置为DataFrame的索引,这样绘图时默认就会用它作为x轴:
# 先设置索引(可在绘图前执行,或DataFrame初始化时处理) self.signals = self.signals.set_index('DATA') def plot(self): plt.figure(figsize=(20, 5)) ax1 = plt.subplot(211) ax1.plot(self.signals['CLOSE']) # 此时默认x轴为DATA索引 ax1.set_title('Price') ax1.tick_params(axis='x', rotation=45) ax2 = plt.subplot(212, sharex=ax1) ax2.set_title('RSI') ax2.plot(self.signals['RSI']) ax2.axhline(30, linestyle='--', alpha=0.5, color='#ff0000') ax2.axhline(70, linestyle='--', alpha=0.5, color='#ff0000') plt.tight_layout() plt.show()
补充说明
- 第一种方法更灵活,无需修改DataFrame结构,直接在绘图时指定x轴数据;
- 第二种方法适合后续需频繁基于日期索引操作的场景,让DataFrame索引更具业务意义;
- 添加
tick_params(rotation=45)是为了避免日期标签过长重叠,plt.tight_layout()可优化子图布局,防止标签被截断。
内容的提问来源于stack exchange,提问作者barteloma
相关产品推荐
相关产品推荐

