Matplotlib barh()创建条形图详解(附带实例)
如需创建条形图,可以使用 pyplot 模块中的 barh() 函数或 Axes 对象的 barh() 方法。可以将条形图看作水平方向的柱形图,从函数或方法的名称可以看出,它们是在 bar 的结尾添加了一个字母 h,该字母表示水平方向。
下面的代码是使用 Axes 对象的 barh() 方法创建条形图:

图 1 条形图
堆积条形图中的两组数据具有相同的 y 轴坐标,其中一组数据的 x 轴坐标由 left 参数指定,该组数据位于每个条形的最左侧,另一组数据位于每个条形的右侧。
下面的代码使用两组数据创建堆积条形图:

图 2 堆积条形图
下面的代码是使用两组数据创建并列条形图。每组数据的条形的高度都是 0.4,第二组数据的 y 轴坐标由第一组数据的 y 轴坐标加上 0.4 后计算得到的,这样可以确保第二组条形会紧挨在第一组条形之后。

图 3 并列条形图
Matplotlib barh()创建基本条形图
barh() 函数或 barh() 方法的用法与 bar() 函数或 bar() 方法类似,只不过第一个参数表示 y 轴坐标,第二个参数表示条形的宽度,即 x 轴的坐标。下面的代码是使用 Axes 对象的 barh() 方法创建条形图:
import matplotlib.pyplot as plt y = range(1, 7) width = [20, 50, 90, 60, 30, 70] fig, ax = plt.subplots() ax.barh(y, width) ax.xaxis.set_ticks(range(0, 101, 10)) plt.show()程序创建的条形图如下图所示:

图 1 条形图
Matplotlib barh()创建堆积条形图
为 barh() 函数或 barh() 方法指定 left 参数,将创建堆积条形图。堆积条形图中的两组数据具有相同的 y 轴坐标,其中一组数据的 x 轴坐标由 left 参数指定,该组数据位于每个条形的最左侧,另一组数据位于每个条形的右侧。
下面的代码使用两组数据创建堆积条形图:
import matplotlib as mpl import matplotlib.pyplot as plt mpl.rcParams['font.sans-serif'] = 'SimSun' y = range(1, 7) x1 = [20, 50, 90, 60, 30, 70] x2 = [10, 30, 70, 20, 80, 10] fig, ax = plt.subplots() ax.barh(y, x1, label='产品一') ax.barh(y, x2, left=x1, label='产品二') ax.legend(loc='upper right') plt.show()程序创建的堆积条形图如下图所示:

图 2 堆积条形图
Matplotlib barh()创建并列条形图
创建并列条形图的关键是第二组数据的每个条形的 y 轴坐标,需要通过对第一组数据的 y 轴坐标与该组数据的每个条形的高度进行求和来得到。下面的代码是使用两组数据创建并列条形图。每组数据的条形的高度都是 0.4,第二组数据的 y 轴坐标由第一组数据的 y 轴坐标加上 0.4 后计算得到的,这样可以确保第二组条形会紧挨在第一组条形之后。
import matplotlib as mpl import matplotlib.pyplot as plt mpl.rcParams['font.sans-serif'] = 'SimSun' y1 = range(1, 7) y2 = [y + 0.4 for y in y1] x1 = [20, 50, 90, 60, 30, 70] x2 = [10, 30, 70, 20, 80, 10] fig, ax = plt.subplots() ax.barh(y1, x1, height=0.4, label='产品一') ax.barh(y2, x2, height=0.4, label='产品二') ax.legend(loc='lower right') plt.show()程序创建的并列条形图如下图所示:

图 3 并列条形图