如何在同一左侧Y轴为两个种群分别添加独立标签?
在同一左侧Y轴添加两个独立标签的实现方法
这个需求确实有点小众,不过用常用的绘图工具就能搞定!核心思路就是绕过默认的单一Y轴标签,手动在左侧Y轴的上下两个位置各加一个自定义标签,对应你的两个种群。下面我用主流的绘图库给你具体实现:
方法一:用Matplotlib实现
Matplotlib的注释功能可以轻松实现这个效果,步骤如下:
1. 基础绘图代码
先画出两个种群的曲线:
import matplotlib.pyplot as plt import numpy as np # 生成模拟数据 x = np.arange(0, 10, 0.1) upper_pop = 100 + 20 * np.sin(x) # 上方种群数据 lower_pop = 30 + 10 * np.cos(x) # 下方种群数据 # 创建绘图对象 fig, ax = plt.subplots(figsize=(8, 5)) ax.plot(x, upper_pop, color='#2ecc71', label='上方种群') ax.plot(x, lower_pop, color='#3498db', label='下方种群')
2. 添加双Y轴标签
利用text()函数在Y轴的上下位置分别放置标签:
# 获取Y轴的专属坐标系(保证标签跟着Y轴移动,不会错位) y_axis_transform = ax.get_yaxis_transform() # 给上方种群加标签(Y轴顶部位置) ax.text(-0.1, 1.02, '上方种群数量', transform=y_axis_transform, va='bottom', ha='center', rotation=90, fontsize=12, color='#2ecc71') # 给下方种群加标签(Y轴底部位置) ax.text(-0.1, -0.02, '下方种群数量', transform=y_axis_transform, va='top', ha='center', rotation=90, fontsize=12, color='#3498db') # 隐藏默认的单一Y轴标签,避免冲突 ax.set_ylabel('') # 调整布局,添加图例 ax.legend() plt.tight_layout() plt.show()
关键细节解释
get_yaxis_transform():获取Y轴的坐标系,这样标签会和Y轴绑定,缩放图表时不会错位- 位置参数:
-0.1是X方向的偏移(向左避开Y轴刻度),1.02和-0.02是Y方向的位置(分别对应轴的顶部和底部外侧) - 颜色可以和对应种群的曲线颜色统一,更直观
方法二:用Plotly实现(交互式图表)
如果需要交互式图表,Plotly的注释功能同样可以实现:
import plotly.graph_objects as go import numpy as np x = np.arange(0, 10, 0.1) upper_pop = 100 + 20 * np.sin(x) lower_pop = 30 + 10 * np.cos(x) fig = go.Figure() # 添加两个种群的曲线 fig.add_trace(go.Scatter(x=x, y=upper_pop, name='上方种群', line_color='#2ecc71')) fig.add_trace(go.Scatter(x=x, y=lower_pop, name='下方种群', line_color='#3498db')) # 添加上方标签 fig.add_annotation( xref='paper', yref='paper', x=-0.05, y=1.03, text='上方种群数量', showarrow=False, textangle=90, font=dict(size=12, color='#2ecc71') ) # 添加下方标签 fig.add_annotation( xref='paper', yref='paper', x=-0.05, y=-0.03, text='下方种群数量', showarrow=False, textangle=90, font=dict(size=12, color='#3498db') ) # 隐藏默认Y轴标题 fig.update_layout(yaxis_title='', margin=dict(l=70)) fig.show()
核心逻辑和Matplotlib一致:用注释功能在Y轴的上下位置放置自定义标签,替代默认的单一标题。
内容的提问来源于stack exchange,提问作者Gabriel
相关产品推荐
相关产品推荐

