基于Pandas DataFrame绘制气泡图的优化实现问询
优化气泡图绘制方案(Matplotlib)
原始数据
给定的Pandas DataFrame定义如下:
import pandas as pd import numpy as np df = pd.DataFrame({"call 1": ['debit card','bond',np.nan], "call 2": ['credit card','mortgage','spending limit'], "call 3":['payment limit',np.nan,np.nan]})
数据形态:
call 1 call 2 call 3 0 debit card credit card payment limit 1 bond mortgage NaN 2 NaN spending limit NaN
需求
绘制符合以下要求的气泡图:
- 每个气泡对应DataFrame的一列(
call 1、call 2、call 3) - 气泡内部显示对应列的所有非空值(例如
call 1气泡需包含debit card、bond) - 气泡大小由对应列的非空值数量决定(已知为
[2,3,1]) - 图表无需展示x、y轴数值
优化实现方案
以下是基于Matplotlib的高效实现方案,避免手动定位的繁琐:
1. 数据预处理
先整理气泡所需的核心数据:
# 计算每列非空值数量 non_null_counts = df.notna().sum().tolist() # 将每列非空值整理为换行分隔的文本(方便在气泡内显示) bubble_labels = ['\n'.join(df[col].dropna()) for col in df.columns] # 为每个气泡分配水平坐标(均匀分布,列数变化时只需调整此列表) x_positions = list(range(1, len(df.columns)+1)) # 统一垂直坐标,让气泡水平排列 y_position = [1] * len(df.columns)
2. 绘制气泡图
使用Matplotlib的scatter绘制气泡,并添加文本标注:
import matplotlib.pyplot as plt # 设置画布大小 plt.figure(figsize=(10, 6)) # 绘制气泡:s参数控制大小,乘以1000是为了让气泡更显眼,可按需调整 plt.scatter(x_positions, y_position, s=[count * 1000 for count in non_null_counts], alpha=0.6, color='#63aeee') # 为每个气泡添加文本内容 for x, y, label in zip(x_positions, y_position, bubble_labels): plt.text(x, y, label, ha='center', va='center', fontsize=10) # 隐藏坐标轴元素,符合需求 plt.xticks([]) plt.yticks([]) # 隐藏边框 for spine in plt.gca().spines.values(): spine.set_visible(False) # 添加可选标题 plt.title('Call Category Bubble Visualization', fontsize=12) plt.tight_layout() plt.show()
方案优势
- 批量处理所有气泡,无需手动逐个定位,列数变化时只需调整坐标列表即可适配
- 数据预处理与绘图逻辑分离,代码可读性和维护性更强
- 可灵活调整气泡的大小、颜色、文本样式,满足个性化需求
内容的提问来源于stack exchange,提问作者Wiliam
相关产品推荐
相关产品推荐

