当你需要展示数据时,图表是一个非常有用的工具。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
参数指定柱子的宽度。然后,使用 title
、xlabel
和 ylabel
函数设置图表标题和坐标轴标签。最后,使用 show
函数显示图表。
添加数据标签
为了更清楚地展示每个店铺的销售数量,我们可以在柱子上添加数据标签。以下是添加数据标签的代码:
# 添加数据标签 for i, v in enumerate(aggregated_data): plt.text(i, v, str(v), ha='center', va='bottom') # 显示图表 plt.show()
我们使用 text
函数添加数据标签,其中 i
和 v
分别表示柱子的索引和高度,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