Matplotlib 柱状图

Matplotlib 柱状图函数

在 Matplotlib 中,我们可以使用 bar() 函数来绘制一个柱状图。柱状图也叫做 “柱形图”,它的主要作用是:展示数据的大小。

语法:

plt.bar(x, y, hatch)

说明:

参数 x 存放的是所有点的 x 轴坐标,参数 y 存放的是所有点的 y 轴坐标,它们可以是列表数组、Series 等。

参数 hatch 用于定义装饰线,常用的取值有:'/'、'|'、'-'、'\\'。每一种符号字符串代表一种几何样式,并且符号字符串的符号数量越多,几何图形的密集程度越高。

提示: 如果想要了解如何绘制 3D 条形图,另请参阅:Matplotlib 3D 条形图

示例 1:基本柱状图

import matplotlib.pyplot as plt

# 绘图
x = [1, 2, 3, 4, 5]
y = [12, 25, 16, 23, 10]
plt.bar(x, y)

# 显示
plt.show()

运行之后,效果如下图所示。

Matplotlib绘制基本柱状图

示例 2:装饰线

import matplotlib.pyplot as plt

# 绘图
x = [1, 2, 3, 4, 5]
y = [12, 25, 16, 23, 10]
plt.bar(x, y, hatch='/')

# 显示
plt.show()

运行之后,效果如下图所示。

Matplotlib柱状图使用装饰性1

分析:

符号的数量越多,几何图形的密集程度越高。当我们把 hatch='/' 改成 hatch='//' 之后,此时效果如下图所示。

Matplotlib柱状图使用装饰性2

当然了,小伙伴们可以自行试一下 hatch 的其他取值,然后看看每一种取值的效果是怎样的。

Matplotlib 柱状图案例

在当前项目下的 data 文件夹中有一个 gaokao.csv 文件,项目结构如下图所示。其中,gaokao.csv 文件保存的 2011 ~ 2020 这十年中每一年的高考人数(单位:万人),内容如下图所示。

Matplotlib柱状图的项目结构

gaokao.csv中的数据

示例 3:Matplotlib 柱状图应用

import pandas as pd
import matplotlib.pyplot as plt

# 设置
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC'] 
plt.rcParams['axes.unicode_minus'] = False

# 读取数据
df = pd.read_csv('data/gaokao.csv')
# 绘制图表
plt.bar(df['年份'], df['人数'])

# 定义标题
plt.title('2011-2020年高考人数')
plt.xlabel('年份', loc='right')
plt.ylabel('人数(万人)', loc='top')
# 改变x轴刻度标签
plt.xticks(range(2011, 2021))
# 定义y轴刻度范围
plt.ylim(900, 1100)
# 添加注释文本
for a, b in zip(df['年份'], df['人数']):
    plt.text(a, b, b, ha='center', va='bottom')

# 显示
plt.show()

运行之后,效果如下图所示。

Matplotlib柱状图的实际应用

Matplotlib 柱状图高级应用

在实际开发中,柱状图的使用频率比较高。某些情况下,基本的柱状图并不能满足实际需求。所以我们还得掌握一些高级柱状图的绘制,主要包括以下 2 种。

  • 堆叠柱状图。
  • 并列柱状图。

示例 4:堆叠柱状图

import matplotlib.pyplot as plt

# 设置
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC'] 
plt.rcParams['axes.unicode_minus'] = False

# 绘图
x = [1, 2, 3, 4, 5]
y1 = [3, 2, 4, 7, 1]          # 男
y2 = [1, 5, 3, 8, 3]          # 女
plt.bar(x, y1)
plt.bar(x, y2, bottom=y1)

# 定义标题
plt.title('婴儿出生人数(柱状图)')
plt.xlabel('日期')
plt.ylabel('人数')

# 显示
plt.show()

运行之后,效果如下图所示。

Matplotlib绘制堆叠柱状图

分析:

对于堆叠柱状图来说,多个数据的 x 轴坐标必须一致的,然后 y 轴坐标可以不相同。另外就是需要借助 bottom 这个参数,将放在下面的数据的 Y 轴坐标设置为 bottom 的值。

当然了,我们不仅仅可以实现 2 种数据的堆叠,还可以对更多数据进行堆叠,小伙伴们可以自行试一下。

示例 5:并列柱状图

import matplotlib.pyplot as plt

# 设置
plt.rcParams['font.family'] = ['SimHei', 'PingFang SC'] 
plt.rcParams['axes.unicode_minus'] = False

# 绘图
x = [1, 2, 3, 4, 5]
y1 = [11, 13, 16, 10, 6]
y2 = [12, 17, 15, 12, 5]
width = 0.3

x1 = x
x2 = [i+width for i in x]
plt.bar(x1, y1, width=width, label='广州')
plt.bar(x2, y2, width=width, label='深圳')
plt.legend()

# 定义标题
plt.title('气温变化(柱状图)')
plt.xlabel('日期')
plt.ylabel('温度')

# 定义刻度标签(将刻度放在两个柱子的正中间)
ticks_x = [i + width/2 for i in x]
dates = ['1日', '2日', '3日', '4日', '5日']
plt.xticks(ticks_x, dates)

# 显示
plt.show()

运行之后,效果如下图所示。

Matplotlib绘制并列柱状图

分析:

如果想要绘制并列柱状图,主要是对 width 这个参数的灵活应用。最后关键代码是定义坐标轴的刻度。

Matplotlib 条形图

条形图是一种和柱状图非常类似的图表,它们之间最重要的区别就是:柱状图是纵向的,而条形图是横向的,就这么简单。

在 Matplotlib 中,我们可以使用 barh() 函数来绘制一个条形图。其中,barh 是 “bar horizontal” 的缩写。

语法:

plt.barh(x, y, hatch)

说明:

barh() 和 bar() 这两个函数的参数是完全一样的。其中,x 和 y 用于定义坐标,hatch 用于定义装饰线。

示例 6:基本条形图

import matplotlib.pyplot as plt

# 绘图
x = [1, 2, 3, 4, 5]
y = [12, 25, 16, 23, 10]
plt.barh(x, y)

# 显示
plt.show()

运行之后,效果如下图所示。

Matplotlib绘制条形图

分析:

条形图的 barh() 函数和柱状图的 bar() 函数其他用法也是一样的。对于条形图来说,它同样可以实现堆叠条形图、并行条形图,小伙伴们可以自行尝试一下。

上一篇: Matplotlib 散点图

下一篇: Matplotlib 直方图

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号