堆积柱状图有堆积柱状图的好处,比如说我们可以很方便地看到多分类总和的趋势。
但是我们发现,在堆积柱状图中,由于基底位置的不同,我们并不能很轻易地弄清楚上方分类的数据的变化趋势。
因此当分类不是特别多,且我们对于总量趋势的重视程度不如各分类的时候,我们就可以考虑使用并列柱状图,这也是一种非常常见的图形。
跟上次一样,我们拿小明20次月考的语数外三门科目的成绩来演示并列柱状图。
欢迎大家关注我的个人博客【数洞】 【备用站】
import matplotlib.pyplot as plt
import numpy as np
# 生成数据
x = np.linspace(1, 21, 20)
y1 = np.random.randint(70, 90, 20) # 语文成绩
y2 = np.random.randint(80, 100, 20) # 数学成绩
y3 = np.random.randint(60, 80, 20) # 英语成绩
# 画图
plt.figure(figsize=(20, 10))
# 语文
plt.bar(x, y1,
width = 0.25,
color = 'c',
align = 'center',
label = '语文',
alpha = 0.5
)
# 数学
plt.bar(x+0.25, y2,
width = 0.25,
color = 'r',
align = 'center',
label = '数学',
alpha = 0.5
)
# 英语
plt.bar(x+0.5, y3,
width = 0.25,
color = 'b',
align = 'center',
label = '英语',
alpha = 0.5
)
# 添加三门科目成绩的均值参考线
# 语文
plt.axhline(y = np.mean(y1),
c = 'c',
ls = '--',
lw = 2,
alpha = 0.6)
# 数学
plt.axhline(y = np.mean(y2),
c = 'r',
ls = '--',
lw = 2,
alpha = 0.6)
# 英语
plt.axhline(y = np.mean(y3),
c = 'b',
ls = '--',
lw = 2,
alpha = 0.6)
# 及格线
plt.axhline(y = 60,
c = 'gray',
ls = '--',
lw = 2,
alpha = 0.6)
# 图例
plt.legend(loc = 'upper right')
# 标题
plt.title('小明20次月考成绩趋势图')
可以看到,小明有些偏科,数学成绩明显好于另外两科,同时英语成绩基本上是最差的,只怕到了大学,小明就是一个标准的理工男……
我们在这里使用了第一节里提到的axhline()方法来添加参考线,这样我们就能清晰地知道小明每次考试不同科目相比于均值来说是高了还是低了。