Matplotlib bar():绘制条形图(附带实例)
条形图或柱形图是一种图表或图形,它显示带有矩形条的分类数据,其高度或长度与它们所代表的值成比例。可以垂直或水平绘制条形。条形图显示了离散类别之间的比较。图表的一个轴显示要比较的特定类别,另一个轴表示测量值。
Matplotlib API 提供了 bar() 函数,可以在 MATLAB 样式中以及面向对象的 API 中使用。与 axis 对象一起使用的 bar() 函数使用大小为(x-width=2;x+width=2;bottom;bottom+height)来绑定矩形创建条形图。
bar() 函数的格式如下:
【实例】显示一所学院提供的各种课程的学生人数。

图 1 条形图
我们可以通过使用条形的厚度和位置来绘制多个条形图。数据变量包含三个系列的四个值。以下代码将显示四个条形图中的三个。这些条的厚度为 0.35 个单位。每个条形图将从前一个移动 0.5 个单位。数据对象是一个多元图,包含过去 4 年在工程学院的三个分支中通过的学生数量。

图 2 绘制多个条形图
堆积条形图是堆叠表示彼此顶部的不同组的条形图。结果为条形图的高度显示组的组合结果。
pyplot.bar() 函数的可选 bottom 参数指定条的起始值。它不是从零运行到一个值,而是图像从底部到顶的值。第一次调用 pyplot.bar() 绘制蓝色条形图。第二次调用 pyplot.bar() 绘制红色条形图,蓝色条形图的底部位于红色条形图的顶部。

图 3 堆积条形图
Matplotlib API 提供了 bar() 函数,可以在 MATLAB 样式中以及面向对象的 API 中使用。与 axis 对象一起使用的 bar() 函数使用大小为(x-width=2;x+width=2;bottom;bottom+height)来绑定矩形创建条形图。
bar() 函数的格式如下:
ax.bar(x, height, width, bottom, align)
- x 表示条形的 x 坐标的标量序列。如果 x 是条形中心(默认)或左边缘,则对齐控件;
- height 是标量或标量序列,表示条的高度;
- width 是标量或类似数组,可选,条形的宽度默认为 0.8;
- bottom 是标量或类似数组,可选,条形的 y 坐标默认为 None;
- align 的可选值为 'center' 或 'edge',默认值为 center。
【实例】显示一所学院提供的各种课程的学生人数。
import matplotlib.pyplot as plt import numpy as np import math fig = plt.figure() ax = fig.add_axes([0,0,1,1]) langs = ['C', 'C++', 'Java', 'Python', 'PHP'] students = [22, 18, 34, 28, 14] ax.bar(langs, students) plt.show()运行程序,效果如下图所示:

图 1 条形图
我们可以通过使用条形的厚度和位置来绘制多个条形图。数据变量包含三个系列的四个值。以下代码将显示四个条形图中的三个。这些条的厚度为 0.35 个单位。每个条形图将从前一个移动 0.5 个单位。数据对象是一个多元图,包含过去 4 年在工程学院的三个分支中通过的学生数量。
data = [[30, 25, 50, 20], [40, 23, 51, 17], [35, 22, 45, 19]] X = np.arange(4) fig = plt.figure() ax = fig.add_axes([0,0,1,1]) ax.bar(X + 0.00, data[0], color = 'b', width = 0.25) ax.bar(X + 0.35, data[1], color = 'g', width = 0.25) ax.bar(X + 0.50, data[2], color = 'r', width = 0.25) plt.show()运行程序,效果如下图所示:

图 2 绘制多个条形图
堆积条形图是堆叠表示彼此顶部的不同组的条形图。结果为条形图的高度显示组的组合结果。
pyplot.bar() 函数的可选 bottom 参数指定条的起始值。它不是从零运行到一个值,而是图像从底部到顶的值。第一次调用 pyplot.bar() 绘制蓝色条形图。第二次调用 pyplot.bar() 绘制红色条形图,蓝色条形图的底部位于红色条形图的顶部。
N = 5 menMeans = (21, 36, 30, 36, 28) womenMeans = (25, 32, 34, 20, 25) ind = np.arange(N) # 组 x 的位置 width = 0.35 fig = plt.figure() ax = fig.add_axes([0,0,1,1]) ax.bar(ind, menMeans, width, color='r') ax.bar(ind, womenMeans, width, bottom=menMeans, color='b') ax.set_ylabel('分数') ax.set_title('按组和性别分数') ax.set_xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5')) ax.set_yticks(np.arange(0, 81, 10)) ax.legend(labels=['男', '女']) plt.show()运行程序,效果如下图所示:

图 3 堆积条形图