如何用ggplot绘制按产品类别统计的销量条形图(订单数×销量)
按产品类别统计总销量并绘制条形图的实现代码
核心逻辑
你需要先按产品类别对订单数据分组,汇总每个类别下的总销量(即同类别所有订单的销量字段求和,而非统计订单数量),再基于汇总结果生成条形图。
代码实现(Python + Pandas + Matplotlib)
1. 导入依赖库
import pandas as pd import matplotlib.pyplot as plt
2. 加载数据(或替换为你的真实数据源)
这里用示例数据模拟你的订单结构,你可以换成从本地文件读取(比如 df = pd.read_csv('你的订单文件.csv')):
# 示例订单数据:订单编号、产品类别、单订单对应类别的销量 data = { '订单编号': ['OD001', 'OD002', 'OD003', 'OD004', 'OD005', 'OD006'], '产品类别': ['电子产品', '服装', '电子产品', '家居', '服装', '服装'], '销量': [3, 5, 2, 1, 4, 2] } df = pd.DataFrame(data)
3. 按类别汇总总销量
# 分组求和:按产品类别聚合,对销量字段求和得到总销量 category_total_sales = df.groupby('产品类别')['销量'].sum().reset_index() # 重命名列名(可选,让结果更直观) category_total_sales.columns = ['产品类别', '总销量']
4. 绘制条形图
# 设置绘图风格(可选) plt.style.use('seaborn-v0_8') # 创建条形图 plt.bar(category_total_sales['产品类别'], category_total_sales['总销量']) # 添加图表标签与标题 plt.xlabel('产品类别') plt.ylabel('总销量') plt.title('各产品类别总销量统计') # 在条形上方标注具体数值(可选,提升可读性) for idx, value in enumerate(category_total_sales['总销量']): plt.text(idx, value + 0.1, str(value), ha='center') # 自动调整布局,避免标签重叠 plt.tight_layout() # 显示图表 plt.show()
补充说明
- 核心区别:用
sum()计算总销量,而非count()统计订单数量,精准匹配你的需求。 - 多类别订单兼容:如果同一订单编号对应多个产品类别(即同一订单有多行不同类别数据),上述代码依然有效,会按类别单独汇总该订单内对应类别的销量。
- 美观化可选:如果想用Seaborn绘制更精致的条形图,可替换绘图部分为:
import seaborn as sns sns.barplot(x='产品类别', y='总销量', data=category_total_sales) plt.title('各产品类别总销量统计') plt.show()
内容的提问来源于stack exchange,提问作者F M
相关产品推荐
相关产品推荐

