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

解决TypeError: cannot unpack non-iterable PathCollection object错误——双轴组合图(柱状图+散点图)图例配置方案

解决双轴图的图例配置与TypeError问题

我来帮你搞定这个问题!先给你拆解下错误根源:ax2.scatter()方法返回的是单个PathCollection对象,它不像plt.plot()那样返回可迭代的线条对象。你在b, =和c, =里加逗号,是在尝试对一个不可迭代的对象做解包操作,这就直接触发了TypeError: cannot unpack non-iterable PathCollection object报错。

接下来我给你一步步调整代码,同时优化图例的配置,让它能正确显示在图表中心下方:

步骤1:修正散点图的赋值方式

把散点图行末尾的逗号去掉,直接赋值即可。同时给每个绘图元素加上label参数,方便后续图例调用:

# 柱状图添加label
a = ax.bar(metal_list, graph_gw_list, color='yellow', label='Point')
# 散点图去掉逗号,添加label
b = ax2.scatter(metal_list, risk_list, color='cyan', label='Risk')
c = ax2.scatter(metal_list, contam_list, color='green', label='Contaminant')

另外注意:你的代码里先调用了df['Point'].plot.bar(),又用ax.bar()画了一次柱状图,这会导致柱状图重复绘制,建议保留其中一个即可,下面的完整示例会保留ax.bar()版本。

步骤2:正确配置下方中心图例

现在我们可以利用每个元素的label属性自动生成图例,同时调整轴位置给图例留出空间,精准定位到中心下方:

修改后的完整代码

import matplotlib.pyplot as plt
import pandas as pd

# 假设你的df、element_list等变量已提前定义
df = df.set_index('Element')
plt.errorbar(element_list, graph_gw_list, yerr=sd_list, linestyle='None', barsabove=True, markersize=8, capsize=10)

fig, ax = plt.subplots(figsize=(10,7))
ax2 = ax.twinx()

# 绘制各图表元素,添加label
a = ax.bar(metal_list, graph_gw_list, color='yellow', label='Point')
b = ax2.scatter(metal_list, risk_list, color='cyan', label='Risk')
c = ax2.scatter(metal_list, contam_list, color='green', label='Contaminant')

# 设置标题与轴标签
plt.title('Points per element')
ax.set_xlabel('Element')
ax.set_ylabel('Point')
ax2.set_ylabel('Screening level')

# 调整轴位置,给下方图例预留空间
box = ax.get_position()
ax.set_position([box.x0, box.y0 + box.height * 0.1, box.width, box.height * 0.9])

# 配置图例:整合三个元素,放在中心下方
p = [a, b, c]
labels = [item.get_label() for item in p]
ax.legend(p, labels, loc='lower center', bbox_to_anchor=(0.5, -0.1), fontsize='small', ncol=3)

plt.show()

关键说明

  • 移除散点图赋值后的逗号,避免对不可迭代对象做解包操作,解决TypeError问题。
  • 给每个绘图元素加label参数,后续可以直接提取标签,不用手动重复编写。
  • 通过ax.set_position()调整主轴位置,再用bbox_to_anchor=(0.5, -0.1)让图例精准定位在图表中心下方,ncol=3让图例横向排列更美观。
  • 移除了重复的柱状图绘制代码,避免图表重叠混乱。

这样修改后,你的双轴组合图就能正常渲染,图例也会乖乖出现在你想要的位置啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 19:12:41