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

如何基于Pandas数据绘制Top10供应商产品类别堆叠柱状图

解决Pandas供应商数据分析与堆叠柱状图可视化问题

嗨,针对你的需求,我整理了一套完整的实现步骤,结合你给出的示例数据,代码可以直接运行验证:

第一步:准备数据与导入依赖库

首先我们需要导入pandas和matplotlib.pyplot,并把你提供的示例数据构造成DataFrame:

import pandas as pd
import matplotlib.pyplot as plt

# 构造示例数据
data = [
    ["VendorA", "ProdABC", "B"],
    ["VendorA", "ProdXYZ", "C"],
    ["VendorAB", "ProdCDC", "A"],
    ["VendorAB", "ProdDEF", "A"],
    ["VendorAB", "ProdKLM", "B"],
    ["VendorF", "ProdXYZ", "D"],
    ["VendorC", "ProdBSE", "C"],
    ["VendorF", "ProdFGH", "D"],
    ["VendorAB", "ProdMNO", "D"],
    ["VendorA", "ProdFGH", "D"],
    ["VendorV", "ProdCDC", "A"],
    ["VendorF", "ProdBSE", "C"]
]

df = pd.DataFrame(data, columns=["Vendor", "Product", "Category"])

第二步:找出产品数量最多的前10位供应商

我们可以通过groupby按供应商分组,用size()统计每个组的产品数量,再按数量降序排序。如果你的实际数据里供应商不足10位,head(10)会自动取全部,不会有问题:

# 统计每个供应商的产品数量,并按降序排序
vendor_product_count = df.groupby("Vendor").size().sort_values(ascending=False)

# 取前10位供应商的名称
top10_vendors = vendor_product_count.head(10).index

# 筛选出Top10供应商的专属数据集
df_top10 = df[df["Vendor"].isin(top10_vendors)]

第三步:绘制堆叠柱状图展示类别细分

要实现堆叠柱状图,我们需要先把数据转换成供应商-类别的交叉统计表(每个单元格对应该供应商在对应类别下的产品数量),再用Matplotlib的堆叠绘制逻辑实现:

# 生成供应商×类别的交叉统计表格
category_pivot = pd.crosstab(df_top10["Vendor"], df_top10["Category"])

# 设置画布大小,让图表更清晰
plt.figure(figsize=(12, 6))

# 初始化底部位置变量,用于实现柱子堆叠
bottom = pd.Series([0]*len(category_pivot.index), index=category_pivot.index)

# 遍历每个类别,依次绘制堆叠的柱状图部分
for category in category_pivot.columns:
    plt.bar(category_pivot.index, category_pivot[category], bottom=bottom, label=category)
    bottom += category_pivot[category]

# 添加图表必要元素,提升可读性
plt.title("Top10供应商产品数量及类别分布", fontsize=14)
plt.xlabel("供应商", fontsize=12)
plt.ylabel("产品总数", fontsize=12)
plt.xticks(rotation=45, ha="right")  # 旋转x轴标签,避免名称重叠
plt.legend(title="产品类别")
plt.tight_layout()  # 自动调整布局,防止标签被截断

# 展示图表
plt.show()

额外提示

  • 如果你的实际数据中存在重复的Vendor+Product组合(比如同一个供应商的同一个产品被多次记录),可以先执行df = df.drop_duplicates(subset=["Vendor", "Product"])去重后再统计,避免重复计数。
  • 堆叠柱状图的每个颜色代表一个产品类别,柱子的总高度就是该供应商的产品总数,能直观对比Top10供应商的总规模和类别分布差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:02:25