如何基于带分类x/y标签的DataFrame绘制气泡大小对应数值的气泡图
实现方案
- 首先你需要把宽格式的DataFrame转成长格式,才能适配散点气泡图的输入要求
- 可以用
seaborn的scatterplot实现,通过size参数绑定数值控制气泡大小
完整可运行代码
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns # ---------------------- 构造示例DataFrame,你已有df可跳过这部分 ---------------------- data = { 'MON': [31,77,39,100,60,25,27,55,27,58,74,87], 'TUE': [84,84,65,75,76,18,7,10,55,5,77,13], 'WED': [59,74,73,63,59,59,65,47,74,42,16,83], 'THU': [67,58,97,88,21,63,82,82,45,42,1,74], 'FRI': [13,9,53,25,62,91,90,64,88,11,70,57] } df = pd.DataFrame(data, index=['JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DEC']) # ----------------------------------------------------------------------------------- # 宽表转长表,提取月份、星期、对应数值三个字段 df_long = df.reset_index().melt(id_vars='index', var_name='week', value_name='count') df_long.rename(columns={'index':'month'}, inplace=True) # 绘制气泡图 plt.figure(figsize=(12, 6)) sns.scatterplot( data=df_long, x='month', y='week', size='count', sizes=(50, 2500), # 最小和最大气泡尺寸,可自行调整 hue='count', # 按数值映射颜色,不需要可以删除这行和下一行 palette='Blues', alpha=0.8 # 气泡透明度,避免重叠看不清 ) # 图表样式调整 plt.xlabel('月份', fontsize=12) plt.ylabel('星期', fontsize=12) plt.title('各月份星期对应数值气泡图', fontsize=14) plt.legend(bbox_to_anchor=(1.01, 1), loc='upper left', borderaxespad=0) plt.tight_layout() plt.show()
参数调整说明
sizes参数:元组第一个值是最小气泡的像素大小,第二个是最大气泡的像素大小,觉得气泡太大或太小可以直接修改这两个值- 如果不需要颜色区分数值大小,删掉
hue和palette两个参数即可 - 可以调整
alpha参数控制气泡透明度,数值越接近0越透明,适合气泡重叠较多的场景
内容的提问来源于stack exchange,提问作者Bappa
相关产品推荐
相关产品推荐

