超详细的Python matplotlib 绘制柱状图 | 您所在的位置:网站首页 › 绘制饼图的命令 › 超详细的Python matplotlib 绘制柱状图 |
复习回顾
Python 为数据展示提供了大量优秀的功能包,其中 matplotlib 模块可以方便绘制制作折线图、柱状图、散点图等高质量的数据包。 关于 matplotlib 模块,我们前期已经对matplotlib进行基本框架、以及常用方法的学习 Python matplotlib 绘制饼图_ python matplotlib绘制折线图_ python入门到进阶,爬虫数据分析全套资料分享讲解 Python面向对象编程:类继承和其衍生术语 Python面向对象编程:深度认识类class_ 在 matplotlib 模块提供的图表中,除了折线图使用最多外,柱状图也是我们日常数据分析的图表。 本期,我们开始学习绘制柱状图相关属性和方法,let's go~ 1. 柱状图概述 什么是柱状图 柱状图又称为条形图,是一种以长方形的长度为变量数据进行统计的图表柱状图用来比较两个或以上类型柱状图只有一个以长方形的长度为变量柱状图可以横向排列或者多维方式展示 柱状图使用场景 柱状图适用在较小数据集的分析适用二维数据集,只比较一个维度数据差异项直观展示各个体之间数据的差异表现离散型的时间序列 柱状图绘制步骤 导入matplotlib.pyplot模块准备数据,可以使用numpy/pandas整理数据调用pyplot.bar()绘制柱状图 案例展示本次,我们分析过去5年内的产品年销量展示 案例所用到的数据如下: import random x_data = ["20{}年".format(i) for i in range(16,21)] y_data = [random.randint(100,300) for i in range(6)] 复制代码绘制柱状图 import matplotlib.pyplot as plt plt.rcParams["font.sans-serif"]=['SimHei'] plt.rcParams["axes.unicode_minus"]=False for i in range(len(x_data)): plt.bar(x_data[i],y_data[i]) plt.title("销量分析") plt.xlabel("年份") plt.ylabel("销量") plt.show() 复制代码2. 柱状图属性 柱状体颜色填充 facecolor(fc)关键字 color 关键字 颜色简称: 属性值说明属性值说明"b"/"bule"蓝色"m"/"magenta"品红"g" /"green"绿色"y"/"yellow"黄色"r"/"red"红色"k"/"black"黑色"c"/"cyan"青色"w"/"white"白色rgb: 格式形式:(r,g,b)取值范围:0~1 柱状描边设置柱状体边框颜色 edgecolor 或者 ec柱状体边框样式 linestyle 或者 ls 线条样式: 属性值说明"-" 、"solid"默认实线显示"--"、"dashed"虚线"-." "dashdot"点划线":"、"dotted"虚线"None" """"空柱状体边框宽度 linewidth 或者 lw 柱状图填充样式 hatch: 设置填充样式属性取值:{'/', '', '|', '-', '+', 'x', 'o', 'O', '.', '*'} | 柱状图刻度标签 tickle label:默认使用数字标签我们对 第一节柱状图添加边框样式为"--",添加指定rgb颜色,填充圆圈 for i in range(len(x_data)): plt.bar(x_data[i],y_data[i],color=(0.2*i,0.2*i,0.2*i),linestyle="--",hatch="o") 复制代码3. 堆叠柱状图 在柱状图中,我们会在同时对比两组数据在同一类中的表现形式,因此需要绘制堆叠柱状图 bottom : 条形底座的y坐标,默认值为0 在第一节案例中,添加一组y轴数据所有数据如下: x_data = ["20{}年".format(i) for i in range(16,21)] y_data = list(random.randint(100,300) for i in range(5)) y2_data = list(random.randint(100,300) for i in range(5)) 复制代码再添加一次pyplot.bar方法,添加bottom属性 plt.bar(x_data,y_data,lw=0.5,fc="r",label="Phone") plt.bar(x_data,y2_data,lw=0.5,fc="b",label="Android",bottom=y_data) 复制代码4. 并列柱状图 在绘制并列的柱状图中,要控制好每个柱状体的位置和大小可以使用width属性 width: 设置每组柱状体的宽度 x轴:x轴的宽度每组直接也要设置好 例如继续改造上面案例,我们为bar1和bar2添加了width属性后,单独设置x轴并排的宽度为0.3 x_width = range(0,len(x_data)) x2_width = [i+0.3 for i in x_width] plt.bar(x_width,y_data,lw=0.5,fc="r",width=0.3,label="Phone") plt.bar(x2_width,y2_data,lw=0.5,fc="b",width=0.3,label="Android") plt.xticks(range(0,5),x_data) 复制代码5. 水平柱状图 柱状图中,有时候需要让柱状图水平放置,比较差异,我们这时候需要使用到barh方法 pyplot.barh(y,width):绘制水平柱状图 结合上述案例,改用barh方法 x_data = ["20{}年".format(i) for i in range(16,21)] y_data = list(random.randint(100,300) for i in range(5)) y2_data = list(random.randint(100,300) for i in range(5)) x_width = range(0,len(x_data)) x2_width = [i+0.3 for i in x_width] plt.barh(x_width,y_data,lw=0.5,fc="r",height=0.3,label="Phone") plt.barh(x2_width,y2_data,lw=0.5,fc="b",height=0.3,label="Android") plt.yticks(range(0,5),x_data) plt.legend() plt.title("销量分析") plt.ylabel("年份") plt.xlabel("销量") plt.show() 复制代码6. 添加折线柱状图 我们在查看柱状图时,有时候会需要辅助折线来查看 使用pyplot.plot()方法汇总折线图 同时使用pyplot.text()显示坐标值 当堆叠图时,需要计算好折线相对位置 plt.plot(x_data,y_data,color="pink",linestyle="--") plt.plot(x_data, y2_data+200, color="skyblue", linestyle="-.") # 柱状图 plt.bar(x_data,y_data,lw=0.5,fc="r",width=0.3,label="Phone",alpha=0.5) plt.bar(x_data,y2_data, lw=0.5, fc="b", width=0.3, label="Android",alpha=0.5,bottom=y_data) for i,j in zip(x_data,y_data): plt.text(i,j+0.05,"%d"%j,ha="center",va="bottom") for i2,j2 in zip(x_data,y2_data): plt.text(i2,j2+180,"%d"%j2,ha="center",va="bottom") 复制代码7. 正负柱状图 我们需要使用Axes对象来设置坐标轴的位置 首先使用pyplot.gca()方法创建axes对象 然后使用matplotlib.spines模块调用set_position设置坐标轴位置 set_position 设置轴位置点 spines[]选项有"left"|"bottom"|"width"|"height" set_position 值格式为(位置类型,数量);位置类型;"outward"|"axes"|"data"|;数量:中心->("轴",0.5),零->("数据",0.0) y_data = np.random.randint(100, 300,5) y2_data = np.random.randint(100, 300,5) ax = plt.gca() ax.spines["bottom"].set_position(('data', 0)) plt.bar(x_data,+y_data,lw=0.5,fc="r",width=0.3,label="Phone") plt.bar(x_data,-y2_data, lw=0.5, fc="b", width=0.3, label="Android") for i,j in zip(x_data,y_data): plt.text(i,j,"%d"%j,ha="center",va="top") for i2,j2 in zip(x_data,y2_data): plt.text(i2,-j2,"%d"%j2,ha="center",va="bottom") 复制代码 总结本期,我们对matplotlib模块中详细学习绘制各种柱状图标相关属性和方法,在遇到需要直观展示离散数据点的差异时,我们可以使用bar()或者barh()绘制美观的图表。 以上是本期内容,欢迎大佬们点赞评论,下期见~ |
CopyRight 2018-2019 实验室设备网 版权所有 |