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

如何用Python绘制以总行数计数为总大小的treemap,解决squarify报错及加标签问题

报错原因

squarify.plot() 第一个入参要求传入仅包含数值的可迭代对象,用来定义每个区块的尺寸。你传入的example是带字符串类型索引的DataFrame结构,函数计算总尺寸时误将字符串索引纳入运算,因此触发int和str相加的类型错误。

实现方案

你做的聚合步骤是必要的,树状图需要提前得到每个类别的尺寸值才能完成布局计算,完整可运行的实现代码如下:

import pandas as pd
import squarify
import matplotlib.pyplot as plt

# 原始示例数据
df = pd.DataFrame({'fruit': ['apple', 'apple', 'kiwi'],
               'color': ['red', 'green', 'green']})

# 按color聚合计数
example = (df["color"].value_counts()).rename_axis("fruit_color").to_frame("count")

# 提取纯数值的计数序列作为区块尺寸
sizes = example['count'].values
# 自定义标签:同时展示类别、计数、百分比
labels = [f"{color}\n{cnt}\n{cnt/sum(sizes)*100:.1f}%" for color, cnt in zip(example.index, example['count'])]

# 绘图配置
plt.figure(figsize=(6, 4))
squarify.plot(
    sizes=sizes,
    label=labels,
    alpha=0.8,
    text_kwargs={'fontsize': 10, 'color': 'white'}
)
# 隐藏坐标轴提升美观度
plt.axis('off')
plt.title('颜色分布占比树状图')
plt.show()
自定义调整说明
  • 若不需要百分比标签,可将标签生成逻辑修改为:labels = [f"{color}\n{cnt}" for color, cnt in zip(example.index, example['count'])]
  • 可通过调整text_kwargs参数修改标签的字体大小、颜色等样式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:21:03