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

matplotlib绘制散点子图报错x and y must be the same size

报错排查方案

你遇到的x and y must be the same size报错,在读取shapefile得到的GeoDataFrame场景下,绝大多数情况不是字段总长度不一致,是空值、字段维度、索引异常导致的隐式长度不匹配,按以下顺序排查即可:

  • 优先排查空值错位问题
    你之前校验长度时大概率只看了整个表的行数,没有统计字段内的实际有效值数量。如果pop、log_lights1992、log_lights2013三个字段的空值位置不重合,单独取列时matplotlib不会自动对齐空值,就会出现长度不匹配。
    先把绘图用到的字段单独取出做整行去空,再用处理后的数据绘图:
    # 提取需要的列,整行删除存在空值的记录
    plot_data = city_join[["pop", "log_lights1992", "log_lights2013"]].dropna()
    f, ax = plt.subplots(1, 2, figsize=(20, 10))
    ax[0].scatter(plot_data["pop"], plot_data["log_lights1992"])
    ax[1].scatter(plot_data["pop"], plot_data["log_lights2013"])
    
    如果需要定位具体是哪个字段存在空值,可以执行print(city_join[["pop", "log_lights1992", "log_lights2013"]].isna().sum())打印每个字段的空值数量。
  • 排查字段维度异常
    部分shapefile读取时会把数值型字段存为嵌套的二维结构(比如每个单元格是长度为1的列表),这种情况下即使行数一致,传入scatter的参数实际维度不匹配也会报错。执行以下代码检查字段维度:
    print(city_join["pop"].ndim, city_join["log_lights1992"].ndim, city_join["log_lights2013"].ndim)
    
    正常一维字段返回值为1,如果返回值为2,对字段值做展平处理即可:city_join["pop"].values.flatten()
  • 排查索引不连续问题
    如果之前对city_join做过空间连接、条件筛选、空间裁剪等操作,DataFrame可能保留原有索引导致索引不连续,取列运算时会触发pandas的隐式对齐,出现长度异常。绘图前先重置索引即可:
    city_join = city_join.reset_index(drop=True)
    

注意:不要直接对x、y两个序列分别单独做dropna(),两个字段空值位置不重合时,单独去空后两个序列的长度依然会不一致,必须对用到的所有字段整行去空。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 04:33:23