首页 > 编程语言 >Python 利用pandas和matplotlib绘制双柱状图

Python 利用pandas和matplotlib绘制双柱状图

时间:2023-11-06 22:04:46浏览次数:39  
标签:bar Python matplotlib height width 柱状图 ax rect

在数据分析和可视化中,常用的一种图形类型是柱状图。柱状图能够清晰地展示不同分类变量的数值,并支持多组数据进行对比。本篇文章将介绍如何使用Python绘制双柱状图。

准备工作

在开始绘制柱状图之前,需要先安装matplotlib和pandas这两个Python库。可以通过pip安装:

pip install matplotlib 
pip install pandas

导入所需库

import pandas as pd
import matplotlib.pyplot as plt

读取并处理数据

# 读取Excel文件
df = pd.read_excel(r'C:\Users\Admin\Desktop\数据核对\新建 XLSX 工作表.xlsx', sheet_name='Sheet3')

# 设置柱状图的宽度
bar_width = 0.35

# 设置x轴的位置
x = df.index

首先使用Pandas读取Excel文件,然后根据实际情况设置柱状图的宽度和x轴位置。这里我们使用DataFrame的索引作为x轴。

绘制柱状图

# 绘制柱状图
fig, ax = plt.subplots()
rects1 = ax.bar(x - bar_width/2, df['销售数量'], bar_width, label='销售数量')
rects2 = ax.bar(x + bar_width/2, df['销售数量2'], bar_width, label='销售数量2')

使用matplotlib绘制柱状图,其中subplots()方法会返回一个Figure对象和一个Axes对象。然后使用bar()方法绘制两组柱状图,并设置标签。

添加标签和标题

# 添加标签和标题
ax.set_xlabel('店铺名称')
ax.set_ylabel('销售数量')
ax.set_title('Double Bar Chart')
ax.set_xticks(x)
ax.set_xticklabels(df['店铺名称'])
ax.legend()

添加数据标签

# 添加数据标签
for rect in rects1:
    height = rect.get_height()
    ax.annotate('{}'.format(height),
                xy=(rect.get_x() + rect.get_width() / 2, height),
                xytext=(0, 3),  # 3 points vertical offset
                textcoords="offset points",
                ha='center', va='bottom')

for rect in rects2:
    height = rect.get_height()
    ax.annotate('{}'.format(height),
                xy=(rect.get_x() + rect.get_width() / 2, height/2),
                xytext=(0, 3),  # 3 points vertical offset
                textcoords="offset points",
                ha='center', va='top')

对于每个柱状图,使用annotate()方法添加数据标签。

显示图形

# 显示图形
plt.show()

最后使用show()方法显示图形。

效果图展示

 

完整代码

import pandas as pd
import matplotlib.pyplot as plt

plt.rcParams['font.family'] = ['SimHei']  # 指定中文字体为黑体

# 读取Excel文件
df = pd.read_excel(r'C:\Users\Admin\Desktop\数据核对\新建 XLSX 工作表.xlsx', sheet_name='Sheet3')

# 设置柱状图的宽度
bar_width = 0.35

# 设置x轴的位置
x = df.index

# 绘制柱状图
fig, ax = plt.subplots()
rects1 = ax.bar(x - bar_width/2, df['销售数量'], bar_width, label='销售数量')
rects2 = ax.bar(x + bar_width/2, df['销售数量2'], bar_width, label='销售数量2')

# 添加标签和标题
ax.set_xlabel('店铺名称')
ax.set_ylabel('销售数量')
ax.set_title('Double Bar Chart')
ax.set_xticks(x)
ax.set_xticklabels(df['店铺名称'])
ax.legend()

# 添加数据标签
for rect in rects1:
    height = rect.get_height()
    ax.annotate('{}'.format(height),
                xy=(rect.get_x() + rect.get_width() / 2, height),
                xytext=(0, 3),  # 3 points vertical offset
                textcoords="offset points",
                ha='center', va='bottom')

for rect in rects2:
    height = rect.get_height()
    ax.annotate('{}'.format(height),
                xy=(rect.get_x() + rect.get_width() / 2, height/2),
                xytext=(0, 3),  # 3 points vertical offset
                textcoords="offset points",
                ha='center', va='top')

# 显示图形
plt.show()

 

 

标签:bar,Python,matplotlib,height,width,柱状图,ax,rect
From: https://www.cnblogs.com/lcl-cn/p/17813836.html

相关文章

  • 【Python基础练习】实验3:列表、字典、集合
    实验3:列表、字典、集合姓名:萌狼蓝天时间:2023年11月6日Python:3.12博客:https://wwww.mllt.cc实验目的(1)了解列表、元组、字典和集合的概念(2)学习列表、元组、字典和集合对象的创建(3)学习列表、元组、字典和集合函数的使用实验内容及原理1.已有列表lst=[1,2,3,4],lst2=l......
  • python--------------paramiko远程控制模块学习
    importparamikodefsshExeCMD():ssh_client=paramiko.SSHClient()ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh_client.connect(hostname="192.168.8.200",port=22,username="root",password="123")stdi......
  • Python 文件处理指南:打开、读取、写入、追加、创建和删除文件
    文件处理是任何Web应用程序的重要部分。Python有多个用于创建、读取、更新和删除文件的函数。文件处理在Python中处理文件的关键函数是open()函数。open()函数接受两个参数:文件名和模式。有四种不同的方法(模式)可以打开文件:"r"-读取-默认值。打开一个文件以进行读取,如果文......
  • echarts带背景色的柱状图
    import*asechartsfrom'echarts';varchartDom=document.getElementById('main');varmyChart=echarts.init(chartDom);varoption;option={xAxis:{type:'category',data:['Mon','Tue','W......
  • Python 文件处理指南:打开、读取、写入、追加、创建和删除文件
    文件处理是任何Web应用程序的重要部分。Python有多个用于创建、读取、更新和删除文件的函数。文件处理在Python中处理文件的关键函数是open()函数。open()函数接受两个参数:文件名和模式。有四种不同的方法(模式)可以打开文件:"r"-读取-默认值。打开一个文件以进行读取,如果文......
  • Python50days
    筛选器方法document.getElementById()-------标签对象-------标签jQuery对象$(document.个体、ElementById())----------jQuery对象----------可以使用jQuery对象提供的方法如何把jQuery对象转为标签对象  $===jQuery$()[0]$("#id")===jQuery("#id") 菜单例子 hide—......
  • `Python 2.x` 与 `3​​.x` 版本简介
    目前市场上有两个Python的版本并存着,分别是Python2.x和Python3.x新的Python程序建议使用Python3.0版本的语法Python2.x是过去的版本解释器名称是pythonPython3.x是现在和未来主流的版本解释器名称是python3相对于Python的早期版本,这是一个较大的升级为了不......
  • Python_Flask视图类和蓝图
    Flask视图类1.设置路由的新方法:将URL路径和一个视图类关联将URL路径和一个函数关联,这个函数又被称为视图函数在Flask中,也可以使用类来处理相关的URL,这样的也被称为视图类。使用类视图的好处是支持继承,可以把一些共性的东西放在父类中,其他子类可以继承###......
  • 如何防止用户阅读Python代码?
    内容来自DOChttps://q.houxu6.top/?s=如何防止用户阅读Python代码?我正在使用Python开发一款软件,该软件将被分发给我雇主的客户。我的雇主希望通过受限时许可证文件来限制软件的使用。如果我们分发.py文件或甚至.pyc文件,那么将很容易(反编译和)删除检查许可证文件的代码。另一......
  • 代码训练营第二十五天(Python)| 216.组合总和III 、17.电话号码的字母组合
    216.组合总和IIIclassSolution:defcombinationSum3(self,k:int,n:int)->List[List[int]]:res=[]self.tracebacking(n,k,1,0,[],res)returnresdeftracebacking(self,targetsum,k,start,now_sum,path,res):......