使用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
相关产品推荐
相关产品推荐

