如何增大气泡图中多类别气泡的尺寸差异?
增大气泡图多类别尺寸差异的方法
我有一个包含5个类别的数据集,已将其绘制成气泡图。当仅存在2个类别时,气泡的尺寸差异清晰可见,但类别数量为5个时,尺寸差异难以分辨。请问如何增大这些气泡的尺寸差异?
可行方案
1. 自定义尺寸区间(适用于数值型尺寸字段)
在seaborn.scatterplot中使用sizes参数,手动设置气泡的最小和最大尺寸值,直接拉大尺寸范围,让不同类别间的视觉差异更显著。例如设置sizes=(20, 500),最小气泡尺寸为20,最大为500,差距会明显提升。
2. 非线性变换尺寸数据(适用于数值型尺寸字段)
如果原始尺寸数值本身差异较小,可以先对数据做非线性变换(如平方、指数运算),放大数值间的差距后再传入size参数。比如将尺寸字段的值进行平方处理,让大数值的增长幅度远大于小数值,从而强化视觉上的尺寸差异。
3. 自定义分类尺寸映射(适用于分类型尺寸字段)
如果size对应的是分类变量(比如你的5个类别),可以通过sizes参数传入字典,为每个类别指定固定的尺寸值,精准控制不同类别间的尺寸差距。例如sizes={"类别1":30, "类别2":120, "类别3":250, "类别4":400, "类别5":550}。
4. 调整整体尺寸缩放比例
配合上述方法,使用size_scale参数整体缩放所有气泡的尺寸,进一步强化视觉差异。比如设置size_scale=1.5,会让所有气泡按比例放大,同时保持类别间的相对尺寸差距。
修改后的代码示例
# 导入模块 import seaborn import pandas as pd from matplotlib import pyplot # 加载示例数据,模拟5个类别场景 tips = seaborn.load_dataset("tips") # 新增一个5类别的字段用于演示 tips["size_category"] = pd.cut(tips["total_bill"], bins=5, labels=["低", "中低", "中", "中高", "高"]) # 绘制气泡图,自定义尺寸差异 axes = seaborn.scatterplot( x="day", y="tip", size="size_category", # 5个类别的字段 hue="time", data=tips, # 为每个类别指定尺寸,拉大差异 sizes={"低":30, "中低":120, "中":250, "中高":400, "高":550}, size_scale=1.2 # 整体放大尺寸 ) # 拆分图例并放置在外侧 num_of_colors = len(tips['time'].unique()) + 1 handles, labels = axes.get_legend_handles_labels() color_hl = handles[:num_of_colors], labels[:num_of_colors] sizes_hl = handles[num_of_colors:], labels[num_of_colors:] # 创建两个独立图例 color_leg = axes.legend( *color_hl, bbox_to_anchor = (1.05, 1), loc = 'upper left', borderaxespad = 0. ) sizes_leg = axes.legend( *sizes_hl, bbox_to_anchor = (1.05, 0), loc = 'lower left', borderaxespad = 0. ) # 保留第一个图例(避免被第二个图例覆盖) axes.add_artist(color_leg) # 调整布局,留出图例空间 pyplot.subplots_adjust(right=0.75) # 显示图像 pyplot.ion() pyplot.show()
内容的提问来源于stack exchange,提问作者Limmi
相关产品推荐
相关产品推荐

