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

如何使用Seaborn结合twinx在柱状图上叠加折线图并解决X轴不匹配问题

X轴不对齐的根本原因

Seaborn不同图表类型对X轴变量的默认处理逻辑存在差异,是出现错位的核心诱因:

  • seaborn.barplot()是分类图表,无论传入的X轴字段week_number是数值还是字符串类型,都会默认将其作为分类变量处理,按数据行的出现顺序分配从0开始的连续整数作为实际绘图坐标,和week_number的实际数值无关。
  • seaborn.lineplot()是数值关系图表,默认会将传入的X轴字段作为数值型变量处理,直接使用week_number的实际数值作为绘图坐标。

如果你的week_number不是从0开始的连续整数(比如从1开始计数、中间存在缺测周数),两种图表的X轴坐标映射关系就会完全不匹配,最终出现叠加错位的问题。

另外你代码中的fig.subplots_adjust参数配置错误,left/bottom/right/top的取值为画布的相对比例,合法范围是0~1,你设置的7、9等数值远大于合法范围,会将绘图区域挤压到画布可视范围外,进一步放大坐标错位的视觉表现。

修复方案
  1. 统一两类图表的X轴坐标映射,最简单的方式是将week_number转为分类类型后再传入绘图函数:
# 预处理数据,将周数转为分类类型
bird_chem_df['week_number'] = bird_chem_df['week_number'].astype('category')
  1. 修正画布边距配置为合法值:
fig.subplots_adjust(left=0.12, bottom=0.1, right=0.88, top=0.9, wspace=0.4, hspace=0.5)
  1. 如果修改后依然存在错位,可以直接使用Matplotlib原生接口绘图,主动指定X轴坐标,完全规避Seaborn的默认逻辑差异:
# 循环内绘图逻辑替换为以下代码
weeks = bird_chem_df['week_number'].values
x_coords = range(len(weeks))
# 绘制柱状图
col.bar(x_coords, bird_chem_df[target_chemical], color='lightsteelblue')
col.set_xticks(x_coords)
col.set_xticklabels(weeks)
col.set_ylim(target_chemicals_display[target_chemical])
# 绘制折线图
bird = col.twinx()
bird.plot(x_coords, bird_chem_df['total_bird_deaths'], color='red')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 04:24:02