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

如何将GeoDataFrame标记大小按5个数值范围分组设置?

按数值范围分组设置散点图标记大小及图例

需求:基于GeoDataFrame的SpeciesCatch列配置散点图标记大小,将数值划分为5个范围组,同一组内使用统一标记大小,同时让图例按范围分组展示,替代原代码中每个数值对应单独图例项的效果。

原代码:

fig, ax = mpl.pyplot.subplots(1, figsize = (10,10))

sns.scatterplot(
    data=fishpts_clip, x="Lon", y="Lat", color='Green', size='SpeciesCatch',
    sizes=(100, 300), legend="full"
)

plt.legend(loc='center left', bbox_to_anchor=(1.05, 0.5), ncol=1, title='Sizes')

原效果:
原图例效果

期望效果:
期望图例效果


解决方案

核心思路是先对SpeciesCatch列做分箱分组,再基于分组列设置标记大小,具体步骤如下:

  1. 对数值列分箱
    使用pandas.cut()将SpeciesCatch划分为5个等距(或自定义)区间,生成新的分组列CatchGroup:

    import pandas as pd
    
    # 按等距划分5组,也可自定义bins参数设置区间
    fishpts_clip['CatchGroup'] = pd.cut(fishpts_clip['SpeciesCatch'], bins=5)
    
  2. 基于分组列绘制散点图
    将size参数指定为新的分组列,同时用字典定义每组对应的标记大小,确保同一组大小统一:

    import matplotlib.pyplot as plt
    import seaborn as sns
    
    fig, ax = plt.subplots(1, figsize=(10,10))
    
    # 自定义每组对应的标记大小,可根据需求调整数值
    size_mapping = {
        fishpts_clip['CatchGroup'].cat.categories[0]: 100,
        fishpts_clip['CatchGroup'].cat.categories[1]: 150,
        fishpts_clip['CatchGroup'].cat.categories[2]: 200,
        fishpts_clip['CatchGroup'].cat.categories[3]: 250,
        fishpts_clip['CatchGroup'].cat.categories[4]: 300
    }
    
    sns.scatterplot(
        data=fishpts_clip, x="Lon", y="Lat", color='Green',
        size='CatchGroup', sizes=size_mapping, legend="full"
    )
    
    # 调整图例位置和标题
    plt.legend(loc='center left', bbox_to_anchor=(1.05, 0.5), ncol=1, title='Catch Range')
    plt.show()
    

关键说明

  • 如果需要自定义分组区间,可在pd.cut()中手动指定bins参数,例如bins=[0, 10, 20, 30, 40, 50]
  • size_mapping的大小值可根据可视化需求调整,保证分组间大小有明显区分
  • 图例将自动显示每个区间范围,与期望效果一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 18:55:12