Matplotlib bar()绘制柱形图(附带实例)
柱形图又称长条图、柱状图、条状图等,是一种以长方形的长度为变量的统计图表。
柱形图用于比较两个或两个以上的数据(不同时间或不同条件下),只有一个变量,通常用于分析较小的数据集。
Matplotlib 绘制柱形图主要使用 bar() 函数,语法格式如下:
【实例 1】 5 行代码绘制简单的柱形图。

图 1 简单的柱形图
使用 bar() 函数可以绘制出各种类型的柱形图,如基本柱形图、多柱形图、堆叠柱形图等,只要将 bar() 函数的主要参数理解透彻,就会达到意想不到的效果。
下面介绍几种常见的柱形图。
【实例 2】基本柱形图。下面使用 bar() 函数绘制“2017—2023年线上教程销售额分析图”,程序代码如下:

图 2 基本柱形图
【实例 3】多柱形图。对于线上教程销售,如果要统计各平台的销售额,可以使用多柱形图,不同颜色的柱形代表不同的平台,如京东、天猫、自营等,程序代码如下:

图 3 多柱形图
柱形图用于比较两个或两个以上的数据(不同时间或不同条件下),只有一个变量,通常用于分析较小的数据集。
Matplotlib 绘制柱形图主要使用 bar() 函数,语法格式如下:
matplotlib.pyplot.bar(x,height,width,bottom=None,*,align='center',data=None,**kwargs)主要参数说明:
- x:x 轴数据;
- height:柱形的高度,也就是 y 轴数据;
- width:浮点型,柱形的宽度,默认值为 0.8,可以指定其他值;
- bottom:标量或数组,可选参数,柱形图的 y 轴坐标,默认值为 0;
- align:对齐方式,如 center(居中)和 edge(边缘),默认值为 center;
- data:关键字参数,如果给定一个数据参数,所有位置和关键字参数将被替换;
【实例 1】 5 行代码绘制简单的柱形图。
import matplotlib.pyplot as plt x=[1,2,3,4,5,6] height=[10,20,30,40,50,60] plt.bar(x,height) plt.show()运行程序,结果如下图所示:

图 1 简单的柱形图
使用 bar() 函数可以绘制出各种类型的柱形图,如基本柱形图、多柱形图、堆叠柱形图等,只要将 bar() 函数的主要参数理解透彻,就会达到意想不到的效果。
下面介绍几种常见的柱形图。
【实例 2】基本柱形图。下面使用 bar() 函数绘制“2017—2023年线上教程销售额分析图”,程序代码如下:
# 导入相关模块 import pandas as pd import matplotlib.pyplot as plt df = pd.read_excel('../datas/books.xlsx') # 读取Excel文件 plt.rcParams['font.sans-serif']=['SimHei'] # 解决中文乱码问题 # 取消科学记数法 plt.gca().get_yaxis().get_major_formatter().set_scientific(False) x=df['年份'] height=df['销售额'] plt.grid(axis="y", which="major") # 生成虚线网格 # x、y轴标签 plt.xlabel('年份') plt.ylabel('线上销售额(元)') # 图表标题 plt.title('2017—2023年线上教程销售额分析图') # 绘制柱形图 plt.bar(x,height,width = 0.5,align='center',color = 'b',alpha=0.5,bottom=0.8) # 设置每个柱形的文本标签,format(b,',')设置销售额采用千位分隔符格式 for a,b in zip(x,height): plt.text(a, b,format(b, ','), ha='center', va='bottom',fontsize=9,color = 'b',alpha=0.9) plt.legend(['销售额']) # 图例 plt.show() # 显示图表运行程序,结果如下图所示:

图 2 基本柱形图
【实例 3】多柱形图。对于线上教程销售,如果要统计各平台的销售额,可以使用多柱形图,不同颜色的柱形代表不同的平台,如京东、天猫、自营等,程序代码如下:
# 导入相关模块 import pandas as pd import matplotlib.pyplot as plt # 读取Excel文件 df = pd.read_excel(io='../datas/books.xlsx',sheet_name='Sheet2') plt.rcParams['font.sans-serif']=['SimHei'] # 解决中文乱码问题 # 取消科学记数法 plt.gca().get_yaxis().get_major_formatter().set_scientific(False) x=df['年份'] y1=df['京东'] y2=df['天猫'] y3=df['自营'] width =0.25 # 柱形宽度,若显示n个柱形,则width值需小于1/n,否则柱形会出现重叠 # y轴标签 plt.ylabel('线上销售额(元)') # 图表标题 plt.title('2017—2023年线上教程销售额分析图') # 绘制柱形图 plt.bar(x,y1,width = width,color = 'darkorange') plt.bar(x+width,y2,width = width,color = 'deepskyblue') plt.bar(x+2*width,y3,width = width,color = 'g') # 设置每个柱形的文本标签,format(b,',')设置销售额采用千位分隔符格式 for a,b in zip(x,y1): plt.text(a, b,format(b, ','), ha='center', va='bottom',fontsize=8) for a,b in zip(x,y2): plt.text(a+width, b,format(b, ','), ha='center', va='bottom',fontsize=8) for a,b in zip(x,y3): plt.text(a + 2*width, b,format(b, ','), ha='center', va='bottom', fontsize=8) plt.legend(['京东','天猫','自营']) # 图例 plt.show() # 显示图表在上述示例中,柱形图中若显示 n 个柱形,则柱形宽度需小于 1/n,否会出现则柱形重叠现象。运行程序,结果如下图所示。

图 3 多柱形图