Python 利用pandas和matplotlib绘制堆叠柱状图
在数据可视化中,堆叠柱状图是一种常用的图表类型,它能够清晰地展示多个类别的数据,并突出显示每个类别中各部分的总量和组成比例。本文将演示如何使用 Python 的 pandas 和 matplotlib 库绘制优化的堆叠柱状图,并展示了销售数量随店铺名称变化的情况。
导入必要的库
首先,我们需要导入 pandas 和 matplotlib.pyplot 库,并指定中文字体为黑体,代码如下:
import pandas as pd
import matplotlib.pyplot as plt plt.rcParams['font.family'] = ['SimHei'] # 指定中文字体为黑体
读取数据
接下来,我们使用 pandas 的 read_excel 函数读取 Excel 文件中的数据,并指定读取的工作表名称为“Sheet3”,如下所示:
df = pd.read_excel(r'C:\Users\liuchunlin2\Desktop\新建文件夹\新建 XLSX 工作表.xlsx', sheet_name='Sheet3')
设置图形参数
在绘制堆叠柱状图之前,我们需要设置柱状图的宽度和 x 轴的位置,代码如下:
bar_width = 0.35 # 设置柱状图的宽度
x = df.index # 设置x轴的位置
绘制堆叠柱状图
使用 matplotlib 库的 subplots 函数创建图形对象,并使用 bar 函数绘制堆叠柱状图,具体代码如下:
fig, ax = plt.subplots()
rects1 = ax.bar(x, df['销售数量'], bar_width, label='销售数量')
rects2 = ax.bar(x, df['销售数量2'], bar_width, bottom=df['销售数量'], label='销售数量2')
添加标签和标题
我们为图形添加轴标签、标题、刻度和图例,使其更具可读性,具体代码如下:
ax.set_xlabel('店铺名称')
ax.set_ylabel('销售数量')
ax.set_title('Stacked Bar Chart')
ax.set_xticks(x)
ax.set_xticklabels(df['店铺名称'])
ax.legend()
显示数据标签
最后,我们使用 annotate 函数在每个柱子上方显示数据标签,以展示具体的销售数量,具体代码如下:
for rect in rects1:
height = rect.get_height()
ax.annotate(f'{height}', xy=(rect.get_x() + rect.get_width() / 2, height), xytext=(0, 3),
textcoords='offset points', ha='center', va='bottom') for rect1, rect2 in zip(rects1, rects2):
height1 = rect1.get_height()
height2 = rect2.get_height()
total_height = height1 + height2
ax.annotate(f'{height2}', xy=(rect2.get_x() + rect2.get_width() / 2, total_height), xytext=(0, 3),
textcoords='offset points', ha='center', va='bottom')
显示图形
最后,使用 plt.show() 函数显示绘制好的堆叠柱状图,代码如下:
plt.show()
通过以上步骤,我们成功绘制出了堆叠柱状图,展示了不同店铺的销售数量情况。
图表效果图展示

完整代码:
import pandas as pd
import matplotlib.pyplot as plt plt.rcParams['font.family'] = ['SimHei'] # 指定中文字体为黑体
# 读取Excel文件
df = pd.read_excel(r'C:\Users\liuchunlin2\Desktop\新建文件夹\新建 XLSX 工作表.xlsx', sheet_name='Sheet3')
# 设置柱状图的宽度
bar_width = 0.35
# 设置x轴的位置
x = df.index # 绘制堆叠柱状图
fig, ax = plt.subplots()
rects1 = ax.bar(x, df['销售数量'], bar_width, label='销售数量')
rects2 = ax.bar(x, df['销售数量2'], bar_width, bottom=df['销售数量'], label='销售数量2') # 添加标签和标题
ax.set_xlabel('店铺名称')
ax.set_ylabel('销售数量')
ax.set_title('Stacked Bar Chart')
ax.set_xticks(x)
ax.set_xticklabels(df['店铺名称'])
ax.legend() # 在每个柱子上方显示数据标签
for rect in rects1:
height = rect.get_height()
ax.annotate(f'{height}', xy=(rect.get_x() + rect.get_width() / 2, height), xytext=(0, 3),
textcoords='offset points', ha='center', va='bottom') for rect1, rect2 in zip(rects1, rects2):
height1 = rect1.get_height()
height2 = rect2.get_height()
total_height = height1 + height2
ax.annotate(f'{height2}', xy=(rect2.get_x() + rect2.get_width() / 2, total_height), xytext=(0, 3),
textcoords='offset points', ha='center', va='bottom') # 显示图形
plt.show()
Python 利用pandas和matplotlib绘制堆叠柱状图的更多相关文章
- 用Python的Pandas和Matplotlib绘制股票KDJ指标线
我最近出了一本书,<基于股票大数据分析的Python入门实战 视频教学版>,京东链接:https://item.jd.com/69241653952.html,在其中给出了MACD,KDJ ...
- 用Python的Pandas和Matplotlib绘制股票唐奇安通道,布林带通道和鳄鱼组线
我最近出了一本书,<基于股票大数据分析的Python入门实战 视频教学版>,京东链接:https://item.jd.com/69241653952.html,在其中给出了MACD,KDJ ...
- Python利用pandas处理Excel数据的应用
Python利用pandas处理Excel数据的应用 最近迷上了高效处理数据的pandas,其实这个是用来做数据分析的,如果你是做大数据分析和测试的,那么这个是非常的有用的!!但是其实我们平时在做 ...
- python之 matplotlib模块之绘制堆叠柱状图
我们先来看一个结果图 看到这个图,我个人的思路是 1 设置标题 import numpy as np import matplotlib.pyplot as plt plt.title('Scores ...
- 利用Pandas和matplotlib分析我爱我家房租区间频率
前几天利用python爬取了我爱我家的租房的一些数据,就想着能不能对房租进行一波分析,于是通过书籍和博客等查阅了相关资料,进行了房租的区间分析.不得不说,用python做区间分析比我之前用sql关键字 ...
- Python利用pandas处理数据后画图
pandas要处理的数据是一个数据表格.代码: 1 import pandas as pd 2 import numpy as np 3 import matplotlib.pyplot as plt ...
- python基础入门:matplotlib绘制多Y轴画图(附源码)
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:屁屁酱 PS:如有需要Python学习资料的小伙伴可以加点击下方链接 ...
- Tableau如何绘制堆叠柱状图
一.将类别,子类别拖拽至列上 二.将度量值拖拽至行上 三.将度量名称拖拽至筛选器上,右键度量名称,编辑筛选器,选择销售额 四.将事先准备的目标销售额拖拽至度量值 五.将度量名称拖拽至标记,分别以颜色和 ...
- python 利用pandas导入数据
- Python——使用matplotlib绘制柱状图
Python——使用matplotlib绘制柱状图 1.基本柱状图 首先要安装matplotlib(http://matplotlib.org/api/pyplot_api.htm ...
随机推荐
- struct 结构体分析
struct分析 1.无成员的空结构体size为 1byte 2.通过/zp可以调整对齐值,默认是8字节 //设编译对齐设定值为Zp //设成员变量的类型为 member type //设成员变量在结 ...
- Windows商店开发者注册失败
前言 最近写了个小工具想上架Windows应用商店,但是在填写信息那一页总是失败,提示Error code 2201. Correlation ID 9d436e3a-94df-498a-b224-8 ...
- ubuntu 20.04 网络配置
参考链接:ubuntu 20.04 网络配置 网络配置文件目录:/etc/netplan/ 配置实例 # 静态 network: version: 2 ethernets: ens33: addres ...
- 自动刷新服务:nodemon
安装命令: npm install -g nodemon 运行命令: nodemon server.js 运行结果:
- OpenLayers示例
http://develop.smaryun.com:81/API/JS/OL3InterfaceDemo/index.htm
- .NET5从零基础到精通:全面掌握.NET5开发技能
C#版本新语法-官网: C#7:https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-7 C#8:https://docs.m ...
- 8、Mybatis之自定义映射
8.1.环境搭建 8.1.1.创建新module 创建名为mybatis_resultMap的新module,过程参考5.1节 8.1.2.创建t_emp和t_dept表 CREATE TABLE ` ...
- 如何使用Python进行投资收益和风险分析
如何投资是现代企业.个人投资者所面临的实际问题,投资的目标是收益尽可能大,但是投资往往伴随着风险,如果在保证收益最大化的情况下,风险最小:或是风险相同的情况下,如何实现收益的最大化:通过本实训,可以使 ...
- ps aux 命令使用
转载请注明出处: ps aux命令是一个常用的Linux/Unix系统命令,它用于查看正在运行的进程信息.下面是该命令使用的参数介绍.命令响应结果参数介绍以及一些使用实例的总结: 命令使用参数介绍 ...
- RabbitMQ入门实践
一.概述: 大多应用中,可通过消息服务中间件来提升系统异步通信.扩展解耦能力. 1.消息服务中两个重要概念: 消息代理(message broker)和目的地(destination)当消息发送者发送 ...