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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 12:15:34