首页 > 编程笔记 > Python笔记 阅读:13

Matplotlib bar()绘制柱形图(附带实例)

柱形图又称长条图、柱状图、条状图等,是一种以长方形的长度为变量的统计图表。

柱形图用于比较两个或两个以上的数据(不同时间或不同条件下),只有一个变量,通常用于分析较小的数据集。

Matplotlib 绘制柱形图主要使用 bar() 函数,语法格式如下:
matplotlib.pyplot.bar(x,height,width,bottom=None,*,align='center',data=None,**kwargs)
主要参数说明:
【实例 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 多柱形图

相关文章