python数据可视化销量柱状图练习

需求:
假设某店铺的商品销量分为 线上销量 和 线下销量:
使用 叠加柱状图 分别显示线上和线下销量。
在柱状图中添加每种商品的总销量。
图表美观,包含图例、网格、颜色区分等。

代码实现:

import matplotlib.pyplot as plt
import numpy as np

class AdvancedSalesBarChart:
    def __init__(self, products, online_sales, offline_sales):
        """
        初始化商品名称和销量数据
        :param products: 商品名称列表
        :param online_sales: 线上销量列表
        :param offline_sales: 线下销量列表
        """
        self.products = products
        self.online_sales = online_sales
        self.offline_sales = offline_sales

    def plot_stacked_bar_chart(self):
        """
        绘制叠加柱状图
        """
        # X轴位置
        x = np.arange(len(self.products))

        # 计算总销量
        total_sales = [online + offline for online, offline in zip(self.online_sales, self.offline_sales)]

        # 创建叠加柱状图
        plt.figure(figsize=(10, 6))
        bar_width = 0.6  # 柱宽

        # 绘制线上销量
        plt.bar(x, self.online_sales, color='skyblue', width=bar_width, label='Online Sales')

        # 绘制线下销量,并叠加在线上销量上
        plt.bar(x, self.offline_sales, color='orange', width=bar_width, bottom=self.online_sales, label='Offline Sales')

        # 添加总销量标签
        for i, total in enumerate(total_sales):
            plt.text(i, total + 5, f'{total}', ha='center', fontsize=10, color='black')

        # 设置X轴标签和标题
        plt.xticks(ticks=x, labels=self.products, fontsize=12)
        plt.title('Stacked Bar Chart of Product Sales', fontsize=16)
        plt.xlabel('Products', fontsize=12)
        plt.ylabel('Sales', fontsize=12)

        # 添加网格线
        plt.grid(axis='y', linestyle='--', alpha=0.7)

        # 添加图例
        plt.legend(fontsize=10)

        # 调整布局并显示图表
        plt.tight_layout()
        plt.show()

if __name__ == "__main__":
    # 商品名称
    products = ['Apple', 'Banana', 'Orange', 'Grape', 'Watermelon']

    # 线上和线下销量数据
    online_sales = [150, 200, 250, 180, 300]
    offline_sales = [120, 100, 150, 80, 170]

    # 创建图表对象并绘制图表
    chart = AdvancedSalesBarChart(products, online_sales, offline_sales)
    chart.plot_stacked_bar_chart()

代码说明

数据分组:
将商品销量划分为 线上销量 和 线下销量,通过叠加柱状图分别展示两类数据。

叠加柱状图:
plt.bar() 的 bottom 参数指定了另一组柱状图的基底,实现叠加显示。

总销量标签:
使用 plt.text() 在柱子顶部显示每种商品的总销量。

美化细节:
添加了图例(区分线上和线下销量)。
设置了网格线,使图表更易阅读。
合理的间距和字体大小,使图表更美观。

数据扩展性:
products、online_sales 和 offline_sales 是可定制的数据,支持扩展到更多商品。

运行效果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

琅中之嶹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值