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

