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

使用Seaborn绘制lineplot时遇TypeError: ufunc 'isfinite'错误求助

解决Seaborn lineplot的TypeError: ufunc 'isfinite'不支持输入类型问题

错误原因

这个错误大概率是Seaborn版本不兼容导致的:errorbar="sd" 参数是在Seaborn 0.12.0版本才引入的新参数,若你使用的是低于该版本的Seaborn,会因参数解析异常触发这个错误;你的示例数据不存在非数值型数据混入的问题,因此可以排除这类情况。

解决方案

方案1:升级Seaborn到最新版本

执行以下命令完成升级:

pip install --upgrade seaborn

升级后你的原代码可正常运行,新版本完全支持errorbar="sd"参数用于计算标准差误差棒。

方案2:兼容旧版Seaborn(替换参数)

如果无法升级版本,将errorbar="sd"替换为旧版本支持的ci="sd"参数即可:

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

dataset = {
    "x": [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3],
    "y": [1.0, 2.3, 4.5, 1.2, 3.4, 5.3, 1.1, 2.4, 3.6, 1.1, 3.3, 5.3],
    "id": ["a", "a", "a", "b", "b", "b", "a", "a", "a", "b", "b", "b"],
    "seed": [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1],
}

df = pd.DataFrame(data=dataset)
print(df.dtypes)

# 替换errorbar参数为旧版支持的ci参数
g = sns.lineplot(data=df, x="x", y="y", hue="id", ci="sd")
plt.show()
plt.close()

方案3:手动计算统计量后绘图(更灵活可控)

若想完全掌控均值和标准差的计算逻辑,可先分组统计再绘图:

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

dataset = {
    "x": [1, 2, 3, 1, 2, 3, 1, 2, 3, 1, 2, 3],
    "y": [1.0, 2.3, 4.5, 1.2, 3.4, 5.3, 1.1, 2.4, 3.6, 1.1, 3.3, 5.3],
    "id": ["a", "a", "a", "b", "b", "b", "a", "a", "a", "b", "b", "b"],
    "seed": [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1],
}

df = pd.DataFrame(data=dataset)
# 按x和id分组,计算y的均值和标准差
stats_df = df.groupby(["x", "id"])["y"].agg(["mean", "std"]).reset_index()

# 绘制折线图
g = sns.lineplot(data=stats_df, x="x", y="mean", hue="id")
# 添加标准差误差棒
g.errorbar(x=stats_df["x"], y=stats_df["mean"], yerr=stats_df["std"], fmt='none', c='gray', capsize=5)
plt.show()
plt.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:01:12