自己查阅了资料和众多博客,记录一下,以备不时之需。
import numpy as np
import matplotlib.pyplot as plt
courses = ["语文", "数学", "英语", "物理", "化学", "生物"]
x_arange = np.arange(len(courses))
scores_zhangsan = [76, 98, 67, 95, 90, 82]
scores_lisi = [96, 72, 98, 69, 72, 81]
bar_width = 0.35
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
"""
绘制条形图,各入参的含义:
x_arange - bar_width / 2:第一个bar在x轴上的中心值,每个刻度值减一半bar宽度得到,第二个bar则是加一半bar宽度;
scores_zhangsan:bar高度,这里也就是分数值;
bar_width:bar宽度;
label:标签
"""
plt.bar(x_arange - bar_width / 2, scores_zhangsan, bar_width, label="张三")
plt.bar(x_arange + bar_width / 2, scores_lisi, bar_width, label="李四")
for x, score_zhangsan, score_lisi in zip(x_arange, scores_zhangsan, scores_lisi):
"""
各入参含义:
x - bar_width / 2:所需绘制的数值在x轴的位置;
score_zhangsan + 1:所需绘制的数值在y轴的位置,加个1是为了在数值和bar顶部留点空隙;
score_zhangsan:所需绘制的数值;
ha='center':对齐方式,这里居中;
fontsize=12:字号大小
"""
plt.text(x - bar_width / 2, score_zhangsan + 1, score_zhangsan, ha='center', fontsize=12)
plt.text(x + bar_width / 2, score_lisi + 1, score_lisi, ha='center', fontsize=12)
plt.xlabel("考试科目")
plt.ylabel("分数")
plt.xticks(x_arange, labels=courses)
plt.title("张三和李四的各科成绩对比")
plt.legend()
plt.show()
效果如下: 理解了这种并列柱状图的绘制原理,除了这种2个bar并列的,更多bar并列的柱状图也能类似画出。
|