matplotlib.__version__ = 3.3.3
摘要:描述了堆积条形图以及误差线的画法。
除了基本的分组条形图之外,还有一类是堆积条形图。让我们来看看应该怎么绘制。
1. 堆积条形图
这里我采用的是在(1)中说明的较为简洁的画法;如果希望绘制三组或者更多,请参考通用方法。
import matplotlib.pyplot as plt
names = ['Chen', 'Wang', 'Lee', 'Zheng']
ages = [25, 22, 21, 24]
mental_ages = [7, 8, 9, 10]
money = [18, 14, 12, 14]
fig, ax = plt.subplots()
# 注意引入了align参数,同时第二个width是负数
ax.bar(names, ages, align='edge', width=0.4, label='Age')
ax.bar(names, mental_ages, align='edge', width=-0.4, label='Mental Age')
ax.bar(names, money, align='edge', width=-0.4, label='Money', bottom=mental_ages)
ax.legend(loc='center left')
注意倒数第二行中的bottom,因为这个参数值默认为0,所以之前的图片都是从0开始;但是这里我们设置bottom为Mental Age的高度,因此就形成了堆积的效果。
2. 条形图增加误差线
对于心理学的图表而言,具有误差线的条形图能够提供更多的信息,添加误差线就需要指定参数yerr的值
import matplotlib.pyplot as plt
names = ['Chen', 'Wang', 'Lee', 'Zheng']
ages = [25, 22, 21, 24]
yerr = [3.4, 4.5, 5.5, 2.7]
# 绘制两组图
fig, ax = plt.subplots()
ax.bar(names, ages, label='Age', yerr=yerr)
ax.legend(loc='lower left')
3. 误差线的美化
在上面的图形中,误差线只有一条线,而常见的误差线往往呈“工”字形。这时候我们能需要指定capsize就可以了。当然,如果你希望修改颜色的话,你可以使用color来指定条形的颜色,使用ecolor指定误差线的颜色。
import matplotlib.pyplot as plt
names = ['Chen', 'Wang', 'Lee', 'Zheng']
ages = [25, 22, 21, 24]
yerr = [3.4, 4.5, 5.5, 2.7]
# 绘制两组图
fig, ax = plt.subplots()
ax.bar(names, ages, label='Age', yerr=yerr, capsize=10)
ax.legend(loc='lower left')
4. 条形图的数字标注
4.1 首先定义标注函数(可以复用的代码)
def set_label(ax, rects, onset=0):
for rect in rects:
height = rect.get_height()
ax.annotate(f'{height}',
xy=(rect.get_x() + rect.get_width() / 2, height),
xytext=(0, onset), # 数字标注比高度要高多少,默认为0
textcoords="offset points",
ha='center', va='bottom')
4.2 然后使用这个函数
import matplotlib.pyplot as plt
names = ['Chen', 'Wang', 'Lee', 'Zheng']
ages = [25, 22, 21, 24]
# 绘制两组图
fig, ax = plt.subplots()
age_bar = ax.bar(names, ages,)
set_label(ax, age_bar, 0)