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

如何用Python为12×17 DataFrame绘制指定样式的分类气泡图?

解决分类气泡图绘制问题

我来帮你搞定这个分类气泡图的需求!你遇到的问题其实很常见,咱们可以用两种简单的方法实现,完全不需要复杂的虚拟值操作。先从最简洁的Seaborn方法开始:

方法一:使用Seaborn Scatterplot(推荐)

Seaborn的scatterplot原生支持分类变量作为坐标轴,而且可以直接用数值控制气泡大小,非常适合你的场景。步骤如下:

1. 构造并转换数据

首先把你的宽格式DataFrame转换成长格式(Seaborn更偏好这种结构):

import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

# 构造你提供的DataFrame
df = pd.DataFrame({
    'A': [0.3, 0.1],
    'B': [0.2, 0.4],
    'C': [0.4, 0.1]
}, index=['X', 'Y'])

# 转换为长格式,方便Seaborn处理
df_long = df.reset_index().melt(id_vars='index', var_name='Column', value_name='Value')
df_long.rename(columns={'index': 'Row'}, inplace=True)

2. 绘制气泡图

直接用scatterplot指定分类轴和大小参数:

# 设置绘图风格
sns.set_style("whitegrid")

plt.figure(figsize=(8, 5))
# 核心绘图代码
sns.scatterplot(
    data=df_long,
    x='Column',       # x轴为列分类(A/B/C)
    y='Row',          # y轴为行分类(X/Y)
    size='Value',     # 用Value控制气泡大小
    sizes=(100, 1000),# 气泡大小的范围,可根据你的数据调整
    alpha=0.7,        # 气泡透明度,避免重叠遮挡
    edgecolor='black',# 气泡边框,提升辨识度
    palette='viridis' # 颜色调色板,可选
)

# 添加标题和标签
plt.title('Categorical Bubble Plot')
plt.xlabel('Columns')
plt.ylabel('Rows')

# 调整图例位置,避免遮挡图表
plt.legend(title='Value', bbox_to_anchor=(1.05, 1), loc='upper left')

plt.tight_layout()
plt.show()

这个方法的优势是代码简洁,自动处理分类轴的刻度和标签,还能轻松调整样式。


方法二:使用Matplotlib手动绘制(更灵活)

如果你需要更精细的控制,可以用Matplotlib手动绘制,核心思路是把分类转换成数值位置,然后逐个绘制气泡:

import pandas as pd
import matplotlib.pyplot as plt

# 还是用之前的DataFrame
df = pd.DataFrame({
    'A': [0.3, 0.1],
    'B': [0.2, 0.4],
    'C': [0.4, 0.1]
}, index=['X', 'Y'])

# 获取分类对应的数值位置
x_categories = df.columns  # ['A', 'B', 'C']
y_categories = df.index    # ['X', 'Y']
x_positions = range(len(x_categories))
y_positions = range(len(y_categories))

plt.figure(figsize=(8, 5))

# 循环每个单元格绘制气泡
for y_idx, row in enumerate(y_categories):
    for x_idx, col in enumerate(x_categories):
        value = df.loc[row, col]
        # 注意:scatter的`s`参数是气泡面积,所以要乘以系数调整大小
        plt.scatter(
            x_positions[x_idx],
            y_positions[y_idx],
            s=value * 2000,  # 系数可根据需求调整
            alpha=0.7,
            edgecolor='black',
            color='teal'
        )

# 设置轴刻度和标签
plt.xticks(x_positions, x_categories)
plt.yticks(y_positions, y_categories)
plt.xlabel('Columns')
plt.ylabel('Rows')
plt.title('Categorical Bubble Plot (Matplotlib)')

# 手动创建图例(可选)
from matplotlib.lines import Line2D
legend_elements = [
    Line2D([0], [0], marker='o', color='w', markerfacecolor='teal', markersize=10, label='0.1'),
    Line2D([0], [0], marker='o', color='w', markerfacecolor='teal', markersize=15, label='0.3'),
    Line2D([0], [0], marker='o', color='w', markerfacecolor='teal', markersize=20, label='0.4')
]
plt.legend(handles=legend_elements, title='Value', bbox_to_anchor=(1.05, 1), loc='upper left')

plt.tight_layout()
plt.show()

这个方法适合需要自定义每个气泡样式的场景,比如不同分类用不同颜色等。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:22:45