数据可视化之matplotlib绘制饼状图
常常为Python的数据可视化而痴迷,将数据进行可视化只需要掌握相关库的方法使用即可。流水线式的库式调用实现正是显示python强大的库的功能。我们可以绘制各种各样的数据图样式,对于数据的反应更加直观而准确。
❤️ 下面我们来对绘制饼图的方法进行简单的展示
我们来看代码
所要用到的函数或参数说明 pie 函数格式说明 pie 函数格式 def pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangle=None, radius=None, counterclock=True, wedgeprops=None, textprops=None, center=(0, 0), frame=False, rotatelabels=False, hold=None, data=None)
pie函数的参数详解 x :(每一块)的比例,如果sum(x) > 1会使用sum(x)归一化; labels :(每一块)饼图外侧显示的说明文字; explode :(每一块)离开中心距离; startangle :起始绘制角度,默认图是从x轴正方向逆时针画起,如设定=90则从y轴正方向画起; shadow :在饼图下面画一个阴影。默认值:False,即不画阴影; labeldistance :label标记的绘制位置,相对于半径的比例,默认值为1.1, 如<1则绘制在饼图内侧; autopct :控制饼图内百分比设置,可以使用format字符串或者format function '%1.1f'指小数点前后位数(没有用空格补齐); pctdistance :类似于labeldistance,指定autopct的位置刻度,默认值为0.6; radius :控制饼图半径,默认值为1; counterclock :指定指针方向;布尔值,可选参数,默认为:True,即逆时针。将值改为False即可改为顺时针。 wedgeprops :字典类型,可选参数,默认值:None。参数字典传递给wedge对象用来画一个饼图。例如:wedgeprops={'linewidth':3}设置wedge线宽为3。 textprops :设置标签(labels)和比例文字的格式;字典类型,可选参数,默认值为:None。传递给text对象的字典参数。 center :浮点类型的列表,可选参数,默认值:(0,0)。图标中心位置。 frame :布尔类型,可选参数,默认值:False。如果是true,绘制带有表的轴框架。 rotatelabels :布尔类型,可选参数,默认为:False。如果为True,旋转每个label到指定的角度。
废话不多说,我们直接来进行代码实例
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 labels = ['娱乐','育儿','饮食','房贷','交通','其它'] sizes = [1,4,5,8,13,14] explode = [0,0,0,0,0.1,0] plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=150) plt.title('饼图数据可视化') plt.show()
我们来看实现测试结果
短短的几行代码就实现了这样的饼图绘制。下面我们对主要的一些方法或参数进行说明。
首先我们来看这行 plt.rcParams[‘font.sans-serif’]=[‘SimHei’]
我们这里是用来正常显示中文标签的,那这个到底是何缘由。刨根问底。
在作图时是无法正常显示中文的,如果你没有这样指定,那么凡是汉字就会显示为小方块。但是,matplotlib是支持unicode,那么为何还是无法显示正常的汉字呢?
那么刨根问底,就要打开它的配置文件,你可以去找到它的matplotlib的库文件,找到配置文件。
我的这个配置文件在D:\python\Lib\site-packages\matplotlib\mpl-data
读者可以参照并根据自己的情况来查找配置文件
较为详细的解释请点击这里
Python matplotlib绘制图片汉字不能正常显示问题
将饼图变为长宽相等的饼图
import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签 labels = ['娱乐','育儿','饮食','房贷','交通','其它'] sizes = [1,4,5,8,13,14] explode = [0,0,0,0,0.1,0] plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=150) plt.title('饼图数据可视化') plt.axis('equal') plt.show()
给饼图添加文本标题
plt.text(1,1,'by jgdabc')
饼图的各个参数应用举例
1:x,指定每一块饼图所占的比例
sizes = [10,20,30,40]
2:labels : 指定每一块饼图外面的文字
labels = ['娱乐','育儿','饮食','房贷']
3:explode :指定每一块饼图距离中心的位置,如果默认为0,就是在中心,如果大于0,就是分离出来
ecplode = [0,0,0.1,0]
4:colors:指定每块饼图的颜色
colors = ['r','y','g','b'] plt.pie(sizes,explode=explode,labels=labels,shadow=False,startangle=150,colors=colors)
5:shadow :指定True是否添加阴影,默认为False,即无阴影,True,即显示阴影
plt.pie(sizes,explode=explode,labels=labels,startangle=150,colors=colors,shadow=True)
6:autopct :指定饼图内百分比设置可以使用format字符串或者formar function '%1.1f’指定小数点后保留一位有效数值
plt.pie(sizes,explode=explode,labels=labels,startangle=150,autopct='%1.1f',colors=colors,shadow=True)
保留一位小数点,并增加百分号(%)
plt.pie(sizes,explode=explode,labels=labels,startangle=150,autopct='%1.1f%',colors=colors,shadow=True)
7:startange : 指定开始的角度,默认从x轴正向逆时针旋转
plt.pie(sizes,explode=explode,labels=labels,startangle=45,autopct='%1.1f%%',colors=colors,shadow=True)
8:counterclock : 指定指针的方向;布尔值,可选参数,默认为:True,逆时针。False即为顺时针。
plt.pie(sizes,counterclock=False,explode=explode,labels=labels,startangle=45,autopct='%1.1f%%',colors=colors,shadow=True)
9:labeldistance :指定label绘制位置,当其值<1绘制在饼图内测,默认为1.1
plt.pie(sizes,labeldistance=0.9,counterclock=False,explode=explode,labels=labels,startangle=45,autopct='%1.1f%%',colors=colors,shadow=True)
10:radius : 指定饼图的半径:参数类型为浮点类型,默认为None。如果半径为None,则默认为1。
plt.pie(sizes,radius=1.5,labeldistance=0.9,counterclock=False,explode=explode,labels=labels,startangle=45,autopct='%1.1f%%',colors=colors,shadow=True)
11:pctdistance :指定autopact的位置
plt.pie(sizes,radius=1.5,labeldistance=0.9,counterclock=False,explode=explode,pctdistance=0.5,labels=labels,startangle=45,autopct='%1.1f%%',colors=colors,shadow=True)
12:textprops:指定标签labels的比例和文字的格式,参数类型为字典,可选参数,默认为:None。
plt.pie(textprops={'fontsize':30,'color':'red'},x=sizes,radius=1.5,labeldistance=0.9,counterclock=False,explode=explode,pctdistance=0.5,labels=labels,startangle=45,autopct='%1.1f%%',colors=colors,shadow=True)
其他
1:设置饼图为正圆形
plt.axis('equal')
2:plt.legend():指定添加图例
相关参数
loc = '' #位置 bbox_to_anchor=[, ] # 外边距 上边 右边 ncol= #分列 borderaxespad = #图例的内边距
plt.legend(loc ='upper right',fontsize = 10,bbox_to_anchor=(1,1),borderaxespad=0.4 )
保存
plt.savefig("D:\\jgdabc饼图.png,dpi = 150,bbox_inches = ''tight") #dpi 分辨率 #bbox_inches 指定是否紧密