python - ValueError : s must be a scalar, 或与 x 和 y 大小相同

标签 python

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

最佳答案

代码对我来说很好用。

  • python 3.7.6
  • Pandas 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'])
    

    关于python - ValueError : s must be a scalar, 或与 x 和 y 大小相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62131029/

    相关文章:

    python - 为什么f(x)对 'x'的导数是 'x'而不是pytorch中的1?

    python - 索引 Python 打印语句

    python - qooxdoo 和 debian lenny

    python - from file import variable 创建变量的副本

    python - 找到 TypeError : coercing to Unicode: need string or buffer, 列表

    python - 在 Python 中从一对或名称映射到一个值

    python - 线程在 Storm 集群中不工作

    python - 将阻塞请求的库重写为异步请求

    python - 如何计算 pandas 行之间的条件百分比变化?

    python - 如何在 Flask 中为每个用户 session 维护一个类实例?