多类型柱形图(Multi-category Bar Plot)是一种用于同时比较多个类别的柱形图。它可以将多个类别的数据以不同颜色的柱形进行展示,使我们可以直观地比较它们之间的差异和关系,如图所示:
那么应该如何绘制多类型柱形图呢,答案也是利用plt.bar();
回忆一下plt.bar的绘图方法:
plt.bar(x, height, width=0.8, bottom=None, align='center',
color=None, edgecolor=None, linewidth=None, tick_label=None, label=None)
在使用plt.bar()
函数绘制柱形图时,以下两个参数是必须的:
x
:柱形的 x 坐标位置。它可以是一个数组或序列,用于确定每个柱形在 x 轴上的位置。每个柱形在 x 轴上的位置是根据提供的x
参数确定的。height
:柱形的高度,即对应数据的值。它可以是一个数组或序列,用于指定每个柱形的高度。每个柱形的高度由提供的height
参数确定。
当x是数组的时候,数组的长度应与要绘制的柱形数量相同,每个元素表示对应柱形的 x 坐标值。这样,可以通过控制数组中每个元素的值来调整每个柱形的位置。例如,如果x = [1, 2, 3]
,则第一个柱形位于 x=1 处,第二个柱形位于 x=2 处,依此类推。
当x
参数为一个序列时,序列的长度应与要绘制的柱形数量相同,序列中的每个元素将被视为柱形的 x 坐标值。这样,可以通过直接指定序列中的元素来确定每个柱形的位置。例如,如果x = ['A', 'B', 'C']
,则第一个柱形标签为 ‘A’,第二个柱形标签为 ‘B’,依此类推。
import matplotlib.pyplot as plt
import numpy as np
# 使用中文
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 创建示例数据
categories = ['Category A', 'Category B', 'Category C']
data1 = [10, 15, 12]
data2 = [8, 10, 14]
# 计算柱形位置
bar_width = 0.35
x1 = [0, 1, 2]
x2 = [x + bar_width for x in x]
# 故柱宽为0.35, 两个类别的间隔为1-0.35*2 = 0.3
# 绘制柱形图
plt.bar(x1, data1, width=bar_width, label='Data 1')
plt.bar(x2, data2, width=bar_width, label='Data 2')
# 绘制网格线
plt.grid(axis='y')
# 绘制图例
plt.xlabel('类别')
plt.ylabel('数量')
plt.title('多类型柱状图')
plt.xticks(x1, categories)
plt.legend()
# 显示图形
plt.show()
示例代码中x1从0开始,柱形宽度为0.35,x2从0+bar_width开始,柱形宽度为0.35
通过调整坐标的值,可以达到不同的显示效果;
当种类更多时,通过调整bar_width的值,如当显示四柱时, 若将bar_width设置为0.2, x1 = [0, 1, 2]
, x2 = [x + bar_width for x in x]
,x3 = [x + 2*bar_width for x in x]
,x4 = [x + 3*bar_width for x in x]
,则不同种类间隔为 1-0.2*4 = 0.2
,代表每个柱子的宽度为0.2,不同种类的柱子间隔为0.2,这样设置的目的,是为了让显示更均衡,你可以自由的调整bar_width的值,来达到不同的显示效果;