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

Python 利用pandas 和 matplotlib绘制柱状图

时间:2023-10-24 22:12:20浏览次数:27  
标签:plt Python 标签 matplotlib 图表 柱状图 添加 data

当你需要展示数据时,图表是一个非常有用的工具。Python 中的 pandas 和 matplotlib 库提供了丰富的功能,可以帮助你轻松地绘制各种类型的图表。本文将介绍如何使用这两个库,绘制一个店铺销售数量的柱状图,并添加各种元素,如数据标签、图例、网格线等。

准备工作

在开始之前,你需要安装 pandas 和 matplotlib 库。如果你还没有安装,可以使用以下命令进行安装

pip install pandas matplotlib

另外,为了在图表中显示中文,你需要下载并安装中文字体文件。这里我们使用宋体,你可以替换为其他中文字体。下载后,将字体文件路径替换到代码中的 font 变量中

# 设置中文字体
font = FontProperties(fname='C:\\Windows\\Fonts\\simhei.ttf', size=12)  # 替换为你的中文字体文件路径和字体大小

数据准备

我们假设有一个 Excel 文件,其中包含多个店铺的销售数据。每个店铺有多个订单,每个订单有一个销售数量。我们需要对每个店铺的销售数量进行求和,并按照销售数量降序排列。以下是数据准备的代码:

import pandas as pd

# 从Excel文件中读取数据
data = pd.read_excel('C:\\Users\Admin\\Desktop\\数据核对\\新建 XLSX 工作表.xlsx')

# 聚合数据
aggregated_data = data.groupby('店铺名称')['销售数量'].sum()

# 按销售数量降序排列
aggregated_data = aggregated_data.sort_values(ascending=False)

print(aggregated_data)

首先,我们使用 pandas 库的 read_excel 函数读取 Excel 文件中的数据。然后,使用 groupby 函数对数据进行聚合,按照店铺名称分组,并对每个组中的销售数量求和。最后,使用 sort_values 函数按照销售数量降序排列。

绘制柱状图

接下来,我们使用 matplotlib 库绘制柱状图。以下是绘制柱状图的代码:

import matplotlib.pyplot as plt

# 绘制柱状图
aggregated_data.plot(kind='bar', color='steelblue', edgecolor='black', width=0.8)

# 设置图表标题和坐标轴标签
plt.title('店铺销售数量')
plt.xlabel('店铺名称')
plt.ylabel('销售数量')

# 显示图表
plt.show()

我们使用 plot 函数绘制柱状图,其中 kind 参数指定图表类型为柱状图,color 参数指定柱子的颜色,edgecolor 参数指定柱子边框的颜色,width 参数指定柱子的宽度。然后,使用 titlexlabelylabel 函数设置图表标题和坐标轴标签。最后,使用 show 函数显示图表。

添加数据标签

为了更清楚地展示每个店铺的销售数量,我们可以在柱子上添加数据标签。以下是添加数据标签的代码:

# 添加数据标签
for i, v in enumerate(aggregated_data):
    plt.text(i, v, str(v), ha='center', va='bottom')

# 显示图表
plt.show()

我们使用 text 函数添加数据标签,其中 iv 分别表示柱子的索引和高度,ha 参数指定水平对齐方式为居中,va 参数指定垂直对齐方式为底部。最后,再次使用 show 函数显示图表。

设置刻度标签

由于店铺名称较长,如果全部显示会导致刻度标签重叠,影响美观和可读性。因此,我们可以旋转刻度标签,并设置字体大小和字体样式。以下是设置刻度标签的代码:

# 设置刻度标签的字体大小和旋转角度
plt.xticks(rotation=45, fontsize=10)

# 显示图表
plt.show()

我们使用 xticks 函数设置刻度标签,其中 rotation 参数指定旋转角度为45度,fontsize 参数指定字体大小为10。

添加图例

我们可以添加图例,以便更好地解释图表中的信息。以下是添加图例的代码:

# 设置图例
plt.legend(['销售数量'], loc='upper right')

# 显示图表
plt.show()

我们使用 legend 函数添加图例,其中 loc 参数指定图例位置为右上角,['销售数量'] 表示图例中的文本。

去除边框和添加网格线

为了让图表更加简洁和美观,我们可以去除上边框和右边框,并添加水平虚线网格线。以下是去除边框和添加网格线的代码

# 去除上边框和右边框
plt.gca().spines['top'].set_visible(False)
plt.gca().spines['right'].set_visible(False)

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

# 显示图表
plt.show()

我们使用 gca 函数获取当前轴对象,然后使用 spines 属性去除上边框和右边框。使用 grid 函数添加水平虚线网格线,其中 axis 参数指定网格线方向为垂直方向,linestyle 参数指定网格线样式为虚线,alpha 参数指定网格线透明度为0.5。

设置背景色和调整布局

最后,我们可以设置图表的背景色,并调整图表布局使得图表内容更加紧凑。以下是设置背景色和调整布局的代码:

# 设置背景色
plt.gca().set_facecolor('#F5F5F5')

# 调整图表布局
plt.tight_layout()

# 显示图表
plt.show()

我们使用 set_facecolor 函数设置背景色为浅灰色,使用 tight_layout 函数调整图表布局。

完整代码

将上面的代码整合起来,得到完整的代码如下:

import pandas as pd
import matplotlib.pyplot as plt

# 从Excel文件中读取数据
data = pd.read_excel('C:\\Users\Admin\\Desktop\\数据核对\\新建 XLSX 工作表.xlsx')

# 聚合数据
aggregated_data = data.groupby('店铺名称')['销售数量'].sum()

# 按销售数量降序排列
aggregated_data = aggregated_data.sort_values(ascending=False)

# 绘制柱状图
aggregated_data.plot(kind='bar', color='steelblue', edgecolor='black', width=0.8)

# 添加数据标签
for i, v in enumerate(aggregated_data):
    plt.text(i, v, str(v), ha='center', va='bottom')

# 设置图表标题和坐标轴标签
plt.title('店铺销售数量')
plt.xlabel('店铺名称')
plt.ylabel('销售数量')

# 设置刻度标签的字体大小和旋转角度
plt.xticks(rotation=45, fontsize=10)

# 设置图例
plt.legend(['销售数量'], loc='upper right')

# 去除上边框和右边框
plt.gca().spines['top'].set_visible(False)
plt.gca().spines['right'].set_visible(False)

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

# 设置背景色
plt.gca().set_facecolor('#F5F5F5')

# 调整图表布局
plt.tight_layout()

# 显示图表
plt.show()

 

标签:plt,Python,标签,matplotlib,图表,柱状图,添加,data
From: https://www.cnblogs.com/lcl-cn/p/17785846.html

相关文章

  • 使用Python随机查询数据库中10个信息然后删除这10个信息
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【刘苏秦】问了一个Python数据库数据处理的问题,一起来看看吧。cursor=connect.cursor()sql="SELECT*FROMinfoswherestatus=''"cursor.execute(sql)result=random.sample(cursor.fetchall(),10)result=[d......
  • # yyds干货盘点 #使用Python随机查询数据库中10个信息然后删除这10个信息
    大家好,我是皮皮。一、前言前几天在Python最强王者交流群【刘苏秦】问了一个Python数据库数据处理的问题,一起来看看吧。cursor=connect.cursor()sql="SELECT*FROMinfoswherestatus=''"cursor.execute(sql)result=random.sample(cursor.fetchall(),10)result=[dict(i......
  • 代码随想训练营第十四天(Python)| 层序遍历 10 、● 226.翻转二叉树 、101.对称二叉树 2
    层序遍历1、迭代法,使用队列classSolution:deflevelOrder(self,root:Optional[TreeNode])->List[List[int]]:res=[]ifrootisNone:returnresqueue=[root]whilequeue:n=len(queue)......
  • python all()详解
    python内置函数all可用于判断传入的可迭代参数iterable中的所有元素是否都为True,如果是则返回True,反之返回False。如果可迭代对象是空的,也会返回True。在判断元素是否为True时,只要元素不是0、空、None、False,就视为True。all()函数接受一个可迭代对象作为参数,仅当可迭代对象......
  • Python41days
    创建表的完整语法约束条件(在数据类型的基础上在进行约束)unsigned   zerofill    defaultnotnull    unique    primarykey     auto_increment其余SQL语句其他查询关键字select  from  where   orderby   limit  ......
  • python内存监测工具memory_profiler
    内存监测工具memory_profiler目录内存监测工具memory_profiler安装参数注解简单使用输出在日志中mprof使用参考资料memory_profiler是Python的一个第三方库,其功能时基于函数的逐行代码分析工具memory_profiler是一个监控进程内存消耗的模块,也可以逐行分析Python程序的内存......
  • python时间监测工具line_profiler
    时间监测工具line_profiler目录时间监测工具line_profiler安装部分注释使用方法同时显示内部函数参考资料ine_profiler是Python的一个第三方库,其功能时基于函数的逐行代码分析工具。通过该库,可以对目标函数允许分析多个函数)进行时间消耗分析,便于代码调优。安装pipinstallli......
  • python基础语法指南
    输出流输出百分号(1)直接使用参数格式化:{:.2%}{:.2%}:显示小数点后2位print('percent:{:.2%}'.format(42/50))percent:84.00%不显示小数位:{:.0%},即,将2改为0print('percent:{:.0%}'.format(42/50))percent:84%(2)格式化为float,然后处理成%格式:{:.2f}%需要对42/50乘......
  • 【Python】【ChatGPT】本地部署ChatGPT学习记录
    学习一下GPT项目的相关使用和部署 一、GPT4ALL模型Github:https://github.com/nomic-ai/gpt4allGPT4ALL项目部署简易,但是在运行体验上一般,并且是只调用CPU来进行运算,看官方文档介绍在嵌入式上有比较大的优势,但是目前个人对嵌入式方向接触不深,仅在本机部署使用。本机配置(CPU:i5......
  • 【Python 千题 —— 基础篇】进制转换:十进制转二进制
    题目描述题目描述计算机底层原理中常使用二进制来表示相关机器码,学会将十进制数转换成二进制数是一个非常重要的技能。现在编写一个程序,输入一个十进制数,将其转换成二进制数。输入描述输入一个十进制数。输出描述程序将输入的十进制数转换为二进制数,并输出其二进制形式。示例示例......