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

如何为Matplotlib图表添加secondary_y右侧副坐标轴?

为Matplotlib图表添加副坐标轴(Secondary Y-Axis)

没问题,要把MSFT股价放到右侧副坐标轴上,你只需要用Matplotlib的twinx()方法创建一个共享X轴的副坐标轴,然后把MSFT的曲线绘制在这个新轴上就行。下面是修改后的完整代码,我会标注关键变化:

%matplotlib inline
%pylab inline
import matplotlib.pyplot as plt
import matplotlib as mpl  # 明确导入mpl,避免引用问题

mpl.style.use('default')
fig, ax = plt.subplots(figsize=(12, 5))

# 主坐标轴(左侧)绘制IBM股价
ax.set_title('Stock Prices', color='C6')
ax.set_xlabel('Date', fontsize=12)
ax.set_ylabel('IBM Price', fontsize=12, color='C0')  # 给主轴标签加对应颜色,更清晰
ax.plot(allstocks['date'], allstocks['ibm'], label='IBM', color='C0')

# 创建副坐标轴(右侧),共享X轴
ax2 = ax.twinx()
# 副坐标轴绘制MSFT股价
ax2.set_ylabel('MSFT Price', fontsize=12, color='C1')  # 副轴标签对应MSFT曲线颜色
line_msft, = ax2.plot(allstocks['date'], allstocks['msft'], label='MSFT', color='C1')

# 合并两个坐标轴的图例,避免重叠
lines_ax, labels_ax = ax.get_legend_handles_labels()
lines_ax2, labels_ax2 = ax2.get_legend_handles_labels()
ax.legend(lines_ax + lines_ax2, labels_ax + labels_ax2, loc='upper left')

plt.show()

关键修改点说明:

  • 使用ax.twinx()创建副坐标轴ax2,它会和主轴ax共享X轴,同时拥有独立的Y轴(右侧)。
  • 把原代码中MSFT的plot调用移到ax2上,这样它就会关联到右侧副轴。
  • 给两个轴的Y标签和曲线设置对应颜色,方便区分数据归属。
  • 合并两个轴的图例,确保所有曲线的标签都能正常显示(如果直接分别调用legend(),可能会导致图例重叠或只显示一个轴的内容)。

如果你的allstocks数据中日期是字符串格式,记得先转成datetime类型避免X轴显示混乱,可以用pd.to_datetime(allstocks['date'])处理(如果使用pandas的话)。

内容的提问来源于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 06:54:36