matplotlib可视化之柱状图plt.bar()
-
在本期内容中,我们先从柱状图(条形图)开始,柱状图实际上是用来表示分组(或离散)变量的可视化,可以使用matplotlib模块中的bar函数完成柱状图的绘制。
函数功能:柱状图,寻找各类别之间的关系 调用方法:plt.bar(x, y, width,color, edgecolor, bottom, linewidth, align, tick_label, align) 参数说明: x:指定x轴上数值 y:指定y轴上的数值 width:表示柱状图的宽度,取值在0~1之间,默认为0.8 color:柱状图的填充色 edgecolor:柱状图的边框颜色 bottom:柱状图底部离横轴的距离 linewidth:柱状图边框宽度 tick_label:柱状图的刻度标签,也可直接将标签赋值给x align:指定x轴上对齐方式,"center","lege"边缘
# 准备数据 xiaoming_score = [80,75,65,58,75,80,90] #小明各科成绩 xiaohong_score =[90,85,75,62,75,60,80] #小红各科成绩 subjects = [语文,英语,数学,物理,化学,生物,体育]
使用各种参数:
plt.bar(x = np.arange(7), # 横坐标 height = xiaoming_score, # 柱状高度 width = 0.35, # 柱状宽度 label = 小明, # 标签 edgecolor = k, # 边框颜色 color = r, # 柱状图颜色 tick_label = subjects, # 每个柱状图的坐标标签 linewidth= 3) # 柱状图边框宽度 plt.legend() #显示标签 plt.show()
水平柱状图:plt.barh()
簇状条形图:通过控制横轴坐标绘图
# 绘图 plt.figure(figsize = (10,7)) bar1 = plt.bar(x = np.arange(7),height = xiaoming_score,width = 0.35,label = 小明,edgecolor = white,color = r,tick_label = subjects) bar2 = plt.bar(x = np.arange(7)+0.35,height = xiaohong_score,width = 0.35,label = 小红) # 标注数值 注:老版本可能没有这个方法,得使用下方做法 plt.bar_label(bar1) plt.bar_label(bar2) # 补充标题及标签 plt.title(小明、小红各科成绩对比) # 图的标题 plt.xlabel(科目,fontsize = 15) # 横轴标签 plt.ylabel(成绩,fontsize = 15) # 纵轴标签 plt.xticks(np.arange(7)+0.17,subjects,fontsize = 12) # 柱状图横轴坐标各类别标签 plt.legend() # 显示两组柱状图的标签 # # 老方法:注释各柱状图的数值,在这里即分数 # for i in range(len(subjects)): # plt.text(x = i-0.1, y = xiaoming_score[i]+1,s = xiaoming_score[i] ) # s表示注释内容 # for i in range(len(subjects)): # plt.text(x = i+0.3, y = xiaohong_score[i]+1,s = xiaohong_score[i] ) # 显示图像 plt.show()
堆叠条形图:通过bottom参数
# 绘图 bar1= plt.bar(x = subjects, height = xiaoming_score, label = 小明, color = steelblue, alpha = 0.8, width = 0.35) bar2 = plt.bar(x = subjects, height = xiaohong_score, label = 小红, color = indianred, alpha = 0.8, width = 0.35, bottom=xiaoming_score) # 标注数值,注:较老版本可能没有此方法,得尝试后面做法 plt.bar_label(bar1,padding=-70) plt.bar_label(bar2,padding=-70) # 补充标题及标签 plt.title(小明、小红各科成绩对比) # 图的标题 plt.xlabel(科目,fontsize = 15) # 横轴标签 plt.ylabel(成绩,fontsize = 15) # 纵轴标签 plt.xticks(np.arange(7),subjects,fontsize = 12) # 柱状图横轴坐标各类别标签 plt.legend() # 显示两组柱状图的标签 # 老做法:注释各柱状图的数值,在这里即分数 # for i in range(len(subjects)): # plt.text(x = i-0.1, y = xiaoming_score[i]-30,s = xiaoming_score[i] ) # for i in range(len(subjects)): # plt.text(x = i-0.1, y = xiaohong_score[i]+30,s = xiaohong_score[i] ) plt.show()