python - ValueError: s 必须是标量,或与 x 和 y 大小相同
问题描述
xs=np.array([2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25])
ys=np.array([10,12,20,22,21,25,30,21,32,34,35,30,50,45,55,60,66,64,67,72,74,80,79,84])
plt.figure(figsize=(8,6))
sns.scatterplot(x=xs,y=ys,marker='o',s=ys*25,color='g',alpha=0.5)
plt.title('scatter plot')
plt.xlabel('xs value')
plt.ylabel('ys value')
plt.show()
我想画一个气泡图。在使用相同的代码之前,我创建了一个气泡图。但是我最近重新安装了所有 anaconda,当我使用此代码时,我不断收到错误消息ValueError: s must be a scalar, or the same size as x and y
解决方案
代码对我来说很好。
- 蟒蛇3.7.6
- 熊猫 1.0.3
简而言之,在绘图中使用 s 需要 (a) 您使用标量(单个数字),或 (b) 它的长度与 x 和 y 的长度匹配,因此可以为每个绘制点分配它自己的大小。
文本“必须是一个标量,或相同的大小”旨在暗示这一点,但可能看起来很神秘。
由于其他人可能很容易遇到此错误,因此我想在此处记录常见原因及其修复方法。
我在做这样的事情时遇到了这个错误:
df[some_filter].plot.scatter(x='x', y='y', s=df['s'])
原因是 x 和 y 字段使用 df 的子集(左侧的每个过滤器),但比例参数 s 不使用过滤后的 DataFrame。因此 s 的长度与 x & y 的长度不匹配,并且 scatter 不知道如何调整所有点的大小。
如果遇到这种情况,最简单的方法可能是将过滤后的 DataFrame 分配给一个新变量,然后将该变量用于 scatter() 调用和 s 参数。
例子:
temp = df[some_filter]
temp.plot.scatter(x='x', y='y', s=temp['s'])
推荐阅读
- c++ - 如何正确使用 std::cin.get() 和 std::cin.peek() 的返回值?
- php - 检查用户是否经过身份验证或没有@Guest 的访客
- .net - Dockerfile复制功能与.NET发布交互
- c# - 如何在接口 IProlongable(存款)中实现 CanToProlong 方法?
- python - 使用带有 pandas.to_csv 的格式化字符串的问题
- computer-vision - 如何将模型形式 2D 中的尺寸转换为 1D?
- reactjs - 反应本机图像未加载。我究竟做错了什么 ?如果我将 uri 传递给它,图像将不会加载
- laravel - laravel new project_name 命令安装太多包
- node.js - Stripe 支付确认方法
- javascript - React Fetch 不获取