Matplotlib – 条形图
柱状图或条形图是一种图表或图形,它用高度或长度与它们所代表的值成比例的矩形条来显示分类数据。这些条形图可以垂直或水平地绘制。
条形图显示离散类别之间的比较。图表的一个轴显示被比较的具体类别,另一个轴代表测量值。
Matplotlib API提供了 bar() 函数,可以在MATLAB风格中使用,也可以在面向对象的API中使用。与轴对象一起使用的bar()函数的签名如下
ax.bar(x, height, width, bottom, align)
该函数用大小为(x -width = 2; x + width=2; bottom; bottom + height)的边界矩形制作一个条形图。
该函数的参数是-
x | 代表条形图的x坐标的标量序列。 align控制x是条形图的中心(默认)还是左边缘。 |
---|---|
height | 代表条形图高度的标量或标量序列。 |
width | 标量或数组,可选,表示条形图的宽度,默认为0.8。 |
bottom | 标量或类似数组,可有可无。条形图的Y坐标,默认为无。 |
align | {‘中心’、’边缘’},可选,默认为’中心’。 |
该函数返回一个包含所有条形图的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()
当比较几个数量和改变一个变量时,我们可能需要一个条形图,其中一种颜色的条形代表一个数量值。
我们可以通过改变条形图的厚度和位置来绘制多个条形图。数据变量包含三个系列的四个数值。下面的脚本将显示三个四条的柱状图。这些条形图的厚度为0.25单位。每个条形图将从上一个条形图中移出0.25个单位。数据对象是一个多变量,包含了过去四年中某工程学院三个分院通过的学生人数。
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() 函数的可选底部参数允许你为条形图指定一个起始值。它不是从零到一个值,而是从底部到这个值。第一次调用 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()