Matplotlib库的导入
导入库import matplotlib.pyplot,柱状图是pyplot的子模块,不能直接导入matplotlib
常用参数详解
matplotlib.pyplot.bar(x, height, width: float = 0.8, bottom = None, *, align: str = ‘center’, data = None, **kwargs)
- x 表示x坐标,数据类型为float类型,一般为np.arange()生成的固定步长列表
- height 表示柱状图的高度,也就是y坐标值,数据类型为float类型,一般为一个列表,包含生成柱状图的所有y值
- width 表示柱状图的宽度,取值在0~1之间,默认值为0.8
- bottom 柱状图的起始位置,也就是y轴的起始坐标,默认值为None
- align 柱状图的中心位置,“center”,"lege"边缘,默认值为’center’
- color 柱状图颜色,默认为蓝色
- alpha 透明度,取值在0~1之间,默认值为1
- label 标签,设置后需要调用plt.legend()生成
- edgecolor 边框颜色
- linewidth 边框宽度,浮点数或类数组,默认为None
- tick_label:柱子的刻度标签,字符串或字符串列表,默认值为None。
- orientation 柱状图是竖直还是水平,竖直:“vertical”,水平条:“horizontal”
绘制单个柱状图
每一步见代码注释,代码如下
import matplotlib.pyplot as plt
import numpy as np
labels = ['A', 'B', 'C', 'D', 'E']
values = [30, 23, 40, 50, 66]
#生成一个固定步长的排列
X = np.arange(len(labels))
#柱状图宽度为0.3,颜色默认为蓝色,透明度为0.8,标签为’This is a example‘
plt.bar(X, values, width = 0.3, alpha = 0.8, label = 'This is a example')
#对于每一个(x, y)在垂直方向为center, 水平位置为bottom的位置生成字体大小为10的y
for x, y in zip(X, values):
plt.text(x, y, '%.4f' % y, fontsize = 10, ha = 'center', va = 'bottom')
#对于每一个位置生成一个label
plt.xticks(X, labels = labels)
plt.title('Example') #图的标题
plt.legend() #生成标签
plt.show()
绘制多个并列柱状图
import matplotlib.pyplot as plt
import numpy as np
labels = ['A', 'B', 'C']
first = [14, 13.5, 32]
second = [15, 5.6, 23]
third = [11, 12, 16.7]
x = np.arange(len(labels)) # x轴刻度标签位置
width = 0.25 # 柱子的宽度
# 计算每个柱子在x轴上的位置,保证x轴刻度标签居中
# x - width,x, x + width即每组数据在x轴上的位置
# 这里举例三个,若多个,往两边加减width即可
plt.bar(x - width, first, width, alpha = 0.8, label='1')
for X, Y in zip(x, first):
plt.text(X - 0.30, Y + 0.05, '%.2f' % Y, fontsize = 8, ha = 'center', va = 'bottom')
plt.bar(x, second, width, alpha = 0.8, label='2')
for X, Y in zip(x, second):
plt.text(X, Y + 0.05, '%.2f' % Y, fontsize = 8, ha = 'center', va = 'bottom')
plt.bar(x + width, third, width, alpha = 0.8, label='3')
for X, Y in zip(x, third):
plt.text(X + 0.30, Y + 0.05, '%.2f' % Y, fontsize = 8, ha = 'center', va = 'bottom')
plt.ylabel('values')
plt.title('Example2')
# x轴刻度标签位置不进行计算
plt.xticks(x, labels = labels)
plt.legend(loc = 'lower right') #在右下角生成标签,还有center、upper,如果不设置,系统自动找到合适地方
plt.show()