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

matplotlib scatter函数报错:ValueError: s需为标量或与x、y尺寸一致

问题排查与解决

报错原因

你调用plt.scatter()时参数顺序错误,导致s参数被传入了颜色字符串(如'g'),而非预期的尺寸数值。

matplotlib的scatter函数核心参数顺序为:x, y, s=None, c=None,你当前写法plt.scatter(Points_Array[c][0], Points_Array[c][1], 'g', Points_Array[c][2])中,第三个参数'g'被赋值给了s(尺寸参数),第四个参数Points_Array[c][2]被赋值给了c(颜色参数)。字符串无法作为尺寸参数,且s的类型/尺寸不符合要求,因此触发ValueError。

当你使用固定标量(如s=50)时,应该是用了命名参数(s=50),此时参数顺序不影响,所以能正常运行。

修正后的代码

推荐使用命名参数避免顺序混淆,修改后的代码如下:

import matplotlib.pyplot as plt

def Overlay_Points(Image_In_Path, Image_Out_Path, Points_Array):
    plt.clf()
    im = plt.imread(Image_In_Path)
    plt.imshow(im)

    for point in Points_Array:
        x, y, size, flag = point
        color = 'g' if flag == 1 else 'r'
        plt.scatter(x, y, s=size, c=color)  # 用命名参数明确s和c的对应关系

    plt.savefig(Image_Out_Path)
    plt.close()
    return 1

Overlay_Points('Anillo.jpg', 'ejemplo.jpg', [[1000, 1000, 50, 1], [2000, 2000, 100, 0]])

额外优化建议

  • 直接遍历Points_Array中的元素,比range(len())的写法更简洁易读
  • 解包点的坐标、尺寸和标记,让代码逻辑更清晰直观

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:01:14