循环调用sns.relplot报cannot reindex from a duplicate axis错误求助
错误根因
你代码的核心问题出在循环对象和y参数的传值逻辑:
- 你的循环是直接遍历
df["x"]、df["y"]、df["z"]三个Series对象,而非列名字符串。当你把整个Series传给sns.relplot的y参数时,seaborn会尝试将该Series和你传入的data(reset_index后的临时DataFrame)做索引对齐:你原df因为将Date设为索引存在重复索引值,哪怕你给data做了reset_index,外部传入的y参数对应的Series仍然保留了原df的重复索引,二者索引无法对齐就会触发重索引报错。 - 附带问题:你
savefig中的{i}.png写法也无法生效,此时i是Series对象,不能直接作为文件名使用。
解决方案
直接修改循环逻辑为遍历列名,让seaborn从reset后的临时DataFrame中直接取数即可,不需要修改原df的索引结构,不影响你后续用Date作为索引做计算:
# 遍历需要绘图的列名字符串 for col in ["x", "y", "z"]: sns.relplot( data=df.reset_index(), x="Date", y=col, # 传入列名,seaborn直接从参数data中取对应列,无索引对齐问题 hue="Share", kind="line", height=10, aspect=1.7 ).savefig(f"{col}.png") # 用f-string格式化,以列名作为保存文件名
内容的提问来源于stack exchange,提问作者Ballongknutte
相关产品推荐
相关产品推荐

