You need to enable JavaScript to run this app. 如何在同一柱状图中使用双Y轴绘制两个变量
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一柱状图中使用双Y轴绘制两个变量

双Y轴同图绘制柱状图实现方法

你可以借助matplotlib的twinx()接口生成共享X轴的第二个Y轴,同时调整两个柱状图的横向位置避免重叠,完整实现代码如下:

import matplotlib.pyplot as plt

# 1. 预计算统计结果,不直接绘图
genre_counts = df.name.value_counts()[:5]
lang_counts = lang.original_language.value_counts()[:5]
bar_width = 0.35  # 单根柱状图的宽度

# 2. 创建画布与第一个Y轴
fig, ax1 = plt.subplots(figsize=(10, 6))

# 3. 在第一个Y轴绘制体裁柱状图,使用pandas原生plot接口,指定位置右偏
genre_counts.plot(
    kind='bar',
    ax=ax1,
    width=bar_width,
    position=1,
    color='#1f77b4',
    label='体裁数量'
)
ax1.set_ylabel('体裁出现次数', color='#1f77b4')
ax1.tick_params(axis='y', labelcolor='#1f77b4')
ax1.set_xlabel('分类')

# 4. 生成共享X轴的第二个Y轴
ax2 = ax1.twinx()

# 5. 在第二个Y轴绘制语言柱状图,指定位置左偏
lang_counts.plot(
    kind='bar',
    ax=ax2,
    width=bar_width,
    position=0,
    color='#ff7f0e',
    label='语言数量'
)
ax2.set_ylabel('语言出现次数', color='#ff7f0e')
ax2.tick_params(axis='y', labelcolor='#ff7f0e')

# 6. 合并双轴图例、调整布局
fig.legend(loc='upper right', bbox_to_anchor=(1,1), bbox_transform=ax1.transAxes)
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.show()

关键参数说明

  • position:pandas柱状图的位置参数,取值范围0~1,两个序列分别设为0和1即可自动错开位置,避免重叠
  • twinx():matplotlib提供的接口,可生成和原坐标系共享X轴、独立Y轴的新坐标系,实现双Y轴效果
  • bar_width:单根柱状图的宽度,建议设置为小于0.5,避免两个柱状图总宽度超过1个X轴刻度间距导致重叠

内容的提问来源于stack exchange,提问作者Sylwi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 07:45:04