如何为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
相关产品推荐
相关产品推荐

