旅游最好的网站建设,虚拟主机服务,新余网站建设公司,广州中学生网站制作#xff08;1#xff09;
饼图#xff08;pie#xff09;#xff0c;即在一个圆圈内分成几块#xff0c;显示不同数据系列的占比大小#xff0c;这也是我们在日常数据的图形展示中最常用的图形之一。
在python中常用matplotlib的pie来绘制#xff0c;基本命令如下所示1
饼图pie即在一个圆圈内分成几块显示不同数据系列的占比大小这也是我们在日常数据的图形展示中最常用的图形之一。
在python中常用matplotlib的pie来绘制基本命令如下所示python3.X版本
vals [1, 2, 3, 4]#创建数据系列
fig, ax plt.subplots()#创建子图
labels A, B, C, D
colors [yellowgreen, gold, lightskyblue, lightcoral]
explode (0, 0.1, 0, 0)
ax.pie(vals, explodeexplode, labelslabels, colorscolors,
autopct%1.1f%%, shadowTrue, startangle90,radius1.2)
ax.set(aspectequal, titlePie plot with ax.pie)#设置标题以及图形的对称
plt.show()Paste_Image.png
上图是在对饼图的模块颜色、标签、百分比、标题、角度、圆形半径以及某一块凸出explode进行设置后最终呈现的图形效果。大部分设置来自于pie函数内即
pie(x, explodeNone, labelsNone, colorsNone, autopctNone, pctdistance0.6,
shadowFalse, labeldistance1.1, startangleNone, radiusNone)
对于该函数内各参数的含义网上资料比比皆是在这里不再赘述大家可以根据自己需求来多次尝试设置美化图形。
2
目前matplotlib中尚无双层饼图绘制的专门介绍但是我们注意到pie函数中有个饼图半径的设置——radius于是我就想可不可以在同一个figure下绘制两个不同的圆饼形成嵌套饼图从而制作出双层饼图比如
vals1 [1, 2, 3, 4]
vals2 [2, 3, 4, 5]
fig, ax plt.subplots()
labels A, B, C, D
ax.pie(vals1, radius1.2)
ax.pie(vals2, radius1)
ax.set(aspectequal, titlePie plot with ax.pie)
plt.show()Paste_Image.png
初战告捷令我信心大增
因此在matplotlib下绘制双层饼图的方法可以总结为基于不同的数据系列分别设计两个饼图嵌套在一起对每个饼图的pie函数内参数radius进行设置就可以得到双层饼图。
3
但是可以看到上面的那个图形还有点粗糙还可以加入百分比、color等等进一步设置
vals1 [1, 2, 3, 4]
vals2 [2, 3, 4, 5]
fig, ax plt.subplots()
labels A, B, C, D
ax.pie(vals1, radius1.2,autopct%1.1f%%,pctdistance0.9)
ax.pie(vals2, radius1,autopct%1.2f%%,pctdistance0.5)
ax.set(aspectequal, titlePie plot with ax.pie)
#plt.legend()
plt.legend(labels,bbox_to_anchor(1.05, 1), locbest, borderaxespad0.)
plt.show()美化的饼图.png
为方便在这里没有对颜色、角度进行参数设置后期若大家有兴趣可以进一步加入不同参数再次设置。在这里主要说明的是
1、图中各饼块的百分比数据也在各自饼图中对pctdistance百分比离圆形距离进行不同设置以便区分开这里边也经过多次尝试
2、对于各饼块颜色代表的数据系列标签采用图例的方式plt.legend放在右边不然饼图中展示的文本内容过多会影响图形效果
3、legend()的图例的位置可以通过关键字参数 loc 指定bbox_to_anchor 关键字可让用户手动控制图例布局。 例如如果你希望轴域图例位于图像的右上角而不是轴域的边角则只需指定角的位置以及该位置的坐标系。
4
进一步地在双层饼图的基础上我又在想可不可以绘制双层环形图。
在这里也就是转换一下思路在两个饼图里边再加个小圆形图并设置成白色背景。经过尝试结果也如我所愿
vals1 [1, 2, 3, 4]
vals2 [2, 3, 4, 5]
vals3[1]
fig, ax plt.subplots()
labels A, B, C, D
ax.pie(vals1, radius1.2,autopct%1.1f%%,pctdistance0.9)
ax.pie(vals2, radius1,autopct%1.1f%%,pctdistance0.75)
ax.pie(vals3, radius0.6,colorsw)
ax.set(aspectequal, titlePie plot with ax.pie)
#plt.legend()
plt.legend(labels,bbox_to_anchor(1, 1), locbest, borderaxespad0.)
plt.show()Paste_Image.png
其原理为绘制三个嵌套饼图其中最里边的饼图设置半径较小整个饼图只有一个变量因此不会分割同时将背景色设置成白色colorsw如此大功告成
实际上还可以进一步延伸绘制多层饼图、多层环形图其原理都是绘制半径不同的pie并设置不同的参数。