Matplotlib - 条形图

条形图是一种图表或图形,它使用矩形条显示分类数据,矩形条的高度或长度与其代表的值成比例。 条形图可以垂直或水平绘制。

条形图显示了不同类别之间的比较。 图表的一个坐标轴显示正在比较的特定类别,另一个坐标轴表示测量值。

Matplotlib API 提供了 bar() 函数,可以在 MATLAB 风格中使用,也可以作为面向对象 API。 与 axes 对象一起使用的 bar() 函数的签名如下 −

ax.bar(x, height, width, bottom, align)

该函数使用大小为 (x −width = 2; x + width=2; bottom; bottom + height) 的边界矩形绘制条形图。

函数的参数是 −

x 表示条形 x 坐标的标量序列。 如果 x 是条中心(默认)或左边缘,则对齐控件。
height 标量或标量序列,表示条的高度。
width 标量或类数组,可选。 条形的宽度默认为 0.8
bottom 标量或类数组,可选。 条形的 y 坐标默认为 None。
align {'center', 'edge'},可选,默认'center'

该函数返回一个包含所有条形图的 Matplotlib 容器对象。

以下是 Matplotlib 条形图的简单示例。 它显示了一个工程学院提供的各种课程的注册学生数量。

import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
langs = ['C', 'C++', 'Java', 'Python', 'PHP']
students = [23,17,35,29,12]
ax.bar(langs,students)
plt.show()
Matplotlib 条形图

当比较多个数量和更改一个变量时,我们可能需要一个条形图,其中我们有一种颜色的条形图代表一个数量值。

我们可以通过调整条形的粗细和位置来绘制多个条形图。 data 变量包含三个系列的四个值。 以下脚本将显示四个条形图的三个条形图。 这些条的厚度为 0.25 个单位。 每个条形图将从前一个条形图移动 0.25 个单位。 数据对象是一个 multidict,其中包含过去四年在工程学院中的三个分支中通过的学生人数。

import numpy as np
import matplotlib.pyplot as plt
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.25, data[1], color = 'g', width = 0.25)
ax.bar(X + 0.50, data[2], color = 'r', width = 0.25)
多个条形图

堆叠条形图将代表不同组的条形堆叠在一起。 结果条的高度显示了组的组合结果。

pyplot.bar() 函数的可选 bottom 参数允许您指定柱的起始值。 它不是从零运行到一个值,而是从底部运行到 value 值。 第一次调用 pyplot.bar() 绘制蓝色条。 第二次调用 pyplot.bar() 绘制红色条,蓝色条的底部位于红色条的顶部。

import numpy as np
import matplotlib.pyplot as plt
N = 5
menMeans = (20, 35, 30, 35, 27)
womenMeans = (25, 32, 34, 20, 25)
ind = np.arange(N) # the x locations for the groups
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('Scores')
ax.set_title('Scores by group and gender')
ax.set_xticks(ind, ('G1', 'G2', 'G3', 'G4', 'G5'))
ax.set_yticks(np.arange(0, 81, 10))
ax.legend(labels=['Men', 'Women'])
plt.show()
分数