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

如何为双坐标轴股票趋势图添加更多股票?

如何在双坐标轴图表的第二轴添加更多股票

我来帮你搞定这个问题!要在第二坐标轴上添加更多股票其实非常简单,核心就是复用已经创建好的ax2对象,不用再新建额外的双坐标轴啦。先帮你修正原代码里的小问题,再一步步教你扩展。

原代码的小问题

首先注意:原代码里先执行了fig, ax1 = plt.subplots(),之后又fig = plt.figure(figsize=(6,4)),这会直接覆盖之前创建的fig对象,导致第一个画布被丢弃,正确的做法是把figsize参数放到subplots()里。

修改后的完整代码(支持多只股票)

假设你的newdf里已经有了更多股票的数据(比如GOOG、MSFT),修改后的代码如下:

import matplotlib.pyplot as plt

# 假设newdf包含date、IBM、AAPL、GOOG、MSFT等列
fig, ax1 = plt.subplots(figsize=(6,4))  # 把画布尺寸参数放在这里,避免重复创建fig
t = newdf['date']

# --- 第一坐标轴:IBM ---
s1 = newdf['IBM']
ax1.plot(t, s1, 'b-', label='IBM')
ax1.set_xlabel('Dates', fontsize=14)
ax1.set_xticklabels(t, rotation=45)
ax1.set_ylabel('Price', color='b')
ax1.tick_params('y', colors='b')
ax1.grid()
ax1.legend(loc=0)

# --- 第二坐标轴:多只股票 ---
ax2 = ax1.twinx()
# 绘制AAPL
s2 = newdf['AAPL']
ax2.plot(t, s2, 'r-', label='AAPL')
# 绘制GOOG
s3 = newdf['GOOG']
ax2.plot(t, s3, 'g-', label='GOOG')
# 绘制MSFT
s4 = newdf['MSFT']
ax2.plot(t, s4, 'orange', label='MSFT')

# 设置第二坐标轴的样式
ax2.set_ylabel('Price', color='darkred')  # 选一个中性色作为轴标签,避免和某只股票颜色冲突
ax2.tick_params('y', colors='darkred')
ax2.legend(loc=2)

fig.tight_layout()
plt.show()

关键步骤说明

  • 复用ax2对象:所有要放在第二坐标轴的股票,都用ax2.plot()来绘制,每只股票指定不同的颜色和label参数,这样图例才能正确显示每只股票的名称。
  • 图例优化:给每个plot()加上label后,调用ax2.legend()就能一次性显示第二坐标轴所有股票的图例;如果想要把两个坐标轴的图例合并,可以收集所有线的对象,再统一创建图例(比如lines1, labels1 = ax1.get_legend_handles_labels(),lines2, labels2 = ax2.get_legend_handles_labels(),然后ax1.legend(lines1+lines2, labels1+labels2, loc=0))。
  • 样式一致性:第二坐标轴的刻度颜色建议用统一的颜色,不要给每只股票单独设置刻度色,否则会让图表显得混乱,保持视觉简洁更重要。

原图表效果

双坐标轴股票趋势图(2只股票)

扩展后预期效果参考

多股票双坐标轴趋势图示例

内容的提问来源于stack exchange,提问作者Ann Kriebel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:47:41