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

适配apt与pip安装的matplotlib版本,修复Python脚本报错

适配不同Matplotlib版本的scatter绘图方案及版本差异说明

适配方案

方案1:批量传入序列(推荐,兼容所有版本)

直接去掉循环,将所有参数以列表/序列形式传入scatter,确保x、y、c、s的长度一致,这种写法在新旧版本Matplotlib中都能正常运行:

import matplotlib.pyplot as plt
import matplotlib

s_xLocs = [864]
s_yLocs = [357]
s_score = [0.33915146615180547]
sMax = 0.34704810474264386

plt.scatter(
    s_xLocs, 
    s_yLocs,  
    c=s_score, 
    s=[20*(score+1.5)**4 for score in s_score], 
    cmap="plasma", 
    marker='.', 
    vmin=0, 
    vmax=sMax
)
matplotlib.pyplot.close()

方案2:保留循环,适配旧版本参数要求

如果必须保留循环逻辑,只需将c参数从单个数值改为单元素列表,旧版本Matplotlib会识别为合法的序列输入:

import matplotlib.pyplot as plt
import matplotlib

s_xLocs = [864]
s_yLocs = [357]
s_score = [0.33915146615180547]
sMax = 0.34704810474264386

for i in range(len(s_xLocs)):
    plt.scatter(
        s_xLocs[i], 
        s_yLocs[i],  
        c=[s_score[i]],  # 改为单元素列表适配旧版本
        s=(20*(s_score[i]+1.5)**4), 
        cmap="plasma", 
        marker='.', 
        vmin=0, 
        vmax=sMax
    )
matplotlib.pyplot.close()

版本差异说明

  • 高版本Matplotlib(≈3.0及以上,pip安装的主流版本):scatter函数的c参数支持单个数值输入,内部会自动将其转换为单元素序列处理,因此原循环中传入单个浮点数不会报错。
  • 旧版本Matplotlib(≈3.0以下,apt源分发的版本通常偏旧,如Ubuntu 18.04的apt源为2.2.3):
    • c参数必须是序列类型(列表、numpy数组等),传入单个数值会触发IndexError;
    • 所有序列参数(x、y、c、s)的长度必须严格一致,若仅修改c为完整列表但s仍为单个值,会因长度不匹配触发ValueError。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:15:35