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

Matplotlib散点图报错ValueError:s参数与x/y尺寸不匹配求助

解决Matplotlib散点图的ValueError问题

问题代码

import matplotlib.pyplot as plt
import numpy as np
import random

x = np.random.randint(-100,100,1000)
y = np.random.randint(-100,100,1000)
size = np.random.rand(100) * 100

mask1 = abs(x) > 50
mask2 = abs(y) > 50

x = x[mask1+mask2]
y = y[mask1+mask2]


plt.scatter(x, y, s=size, c=x, cmap='jet', alpha=0.7)
plt.colorbar()
plt.show()

报错信息

ValueError                                Traceback (most recent call last)
Input In [56], in <cell line: 16>()
     12 x = x[mask1+mask2]
     13 y = y[mask1+mask2]
---> 16 plt.scatter(x, y, s=size, c=x, cmap='jet', alpha=0.7)
     17 plt.colorbar()
     18 plt.show()
ValueError: s must be a scalar, or float array-like with the same size as x and y

错误原因

你用mask1+mask2过滤了x和y,过滤后的x、y长度不再是初始的1000,而size是固定长度100的数组,和过滤后的x、y长度不匹配,触发了Matplotlib的规则:s要么是单个标量(所有点大小一致),要么是和x、y长度完全相同的数组(每个点对应一个大小)。

解决方案

有三种可行的修改方式:

  • 方式一:同步过滤size数组
    先把size初始化为和x、y一致的1000长度,再用相同的mask过滤,确保三者长度匹配:

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.random.randint(-100,100,1000)
    y = np.random.randint(-100,100,1000)
    size = np.random.rand(1000) * 100  # 初始长度和x、y一致
    
    mask = abs(x) > 50 + abs(y) > 50
    x = x[mask]
    y = y[mask]
    size = size[mask]  # 同步过滤size
    
    plt.scatter(x, y, s=size, c=x, cmap='jet', alpha=0.7)
    plt.colorbar()
    plt.show()
    
  • 方式二:用标量统一设置点大小
    如果不需要每个点大小不同,直接给s传固定数值,比如s=100:

    plt.scatter(x, y, s=100, c=x, cmap='jet', alpha=0.7)
    
  • 方式三:过滤后生成对应长度的size
    先完成x、y的过滤,再根据过滤后的x长度生成size:

    import matplotlib.pyplot as plt
    import numpy as np
    
    x = np.random.randint(-100,100,1000)
    y = np.random.randint(-100,100,1000)
    
    mask1 = abs(x) > 50
    mask2 = abs(y) > 50
    
    x = x[mask1+mask2]
    y = y[mask1+mask2]
    size = np.random.rand(len(x)) * 100  # 按过滤后x的长度生成size
    
    plt.scatter(x, y, s=size, c=x, cmap='jet', alpha=0.7)
    plt.colorbar()
    plt.show()
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:09:30