You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 12:00:59