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

Matplotlib次坐标轴属性访问及双侧轴线元素配色实现方法

Matplotlib次坐标轴属性访问及双侧轴线元素配色实现方法

嘿,我来帮你搞定这个双轴可视化的配色问题!你已经完成了大部分工作,只差最后几步就能实现完美的双侧配色效果啦。

先解答你的第一个问题:次坐标轴的属性访问方式

其实你创建的ax2就是次坐标轴的完整操作对象,和主坐标轴ax的用法完全一致——不管是设置刻度、标签、脊柱样式,还是调整其他轴属性,直接通过ax2调用对应的方法就行,比如你已经用到的ax2.tick_params(),本质就是在操作次坐标轴的刻度参数。

再解决第二个问题:如何给双侧脊柱(spines)上色

你之前尝试ax.spines['left'].set_color('orange')没生效,大概率是因为没隐藏另一侧的脊柱,导致颜色被遮挡或者视觉上不明显。咱们一步步来调整:

  • 对于主坐标轴ax,我们只保留左侧脊柱显示,隐藏右侧脊柱,再给左侧脊柱设置对应颜色:
    ax.spines['left'].set_color('b')
    ax.spines['right'].set_visible(False)
    
  • 对于次坐标轴ax2,我们只保留右侧脊柱显示,隐藏左侧脊柱,再给右侧脊柱设置对应颜色:
    ax2.spines['right'].set_color('g')
    ax2.spines['left'].set_visible(False)
    

另外,建议把两个轴的y轴标签也改成对应颜色,让整体风格更统一:

ax.set_ylabel('Y values (Series A)', color='b')
ax2.set_ylabel('Y values (Series B)', color='g')

整合后的完整代码

直接运行下面的代码,就能得到你想要的双侧配色效果:

import matplotlib.pyplot as plt
import matplotlib as mpl
import pandas as pd

df = pd.DataFrame(data={'Series A':[1,1.25,1.5,1.75,2],'Series B':[11,10.75,10.5,10.25,10]})

fig1,ax = plt.subplots()
# 绘制主坐标轴数据
df['Series A'].plot(ax=ax,style='o-',lw=0.5,legend=False,color='b',ylim=(0,3));
ax.set_xlabel('x')
ax.set_ylabel('Y values (Series A)', color='b')
# 主坐标轴配色设置:左侧脊柱+刻度+标签为蓝色,隐藏右侧脊柱
ax.tick_params(axis='y', colors='b',which='both')
ax.spines['left'].set_color('b')
ax.spines['right'].set_visible(False)

# 创建次坐标轴
ax2 = ax.twinx()
# 绘制次坐标轴数据
df['Series B'].plot(ax=ax2,style='^-',legend=False,lw=0.5,color='g',ylim=(9,12));
ax2.set_ylabel('Y values (Series B)', color='g')
# 次坐标轴配色设置:右侧脊柱+刻度+标签为绿色,隐藏左侧脊柱
ax2.tick_params(axis='y', colors='g',which='both')
ax2.spines['right'].set_color('g')
ax2.spines['left'].set_visible(False)

plt.show();

运行后你会看到:左侧的脊柱、刻度(含主次)、标签都是蓝色,右侧的对应元素都是绿色,完全符合你的需求!

备注:内容来源于stack exchange,提问作者germ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 11:05:29