Python通过matplotlib画双层饼图及环形图简单示例


Posted in Python onDecember 15, 2017

(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, explode=explode, labels=labels, colors=colors,
 autopct='%1.1f%%', shadow=True, startangle=90,radius=1.2)
ax.set(aspect="equal", title='Pie plot with `ax.pie`')#设置标题以及图形的对称
plt.show()

Python通过matplotlib画双层饼图及环形图简单示例

上图是在对饼图的模块颜色、标签、百分比、标题、角度、圆形半径,以及某一块凸出(explode)进行设置后,最终呈现的图形效果。大部分设置来自于pie()函数内,即:

pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6,
shadow=False, labeldistance=1.1, startangle=None, radius=None)

对于该函数内各参数的含义,网上资料比比皆是,在这里不再赘述,大家可以根据自己需求来多次尝试,设置美化图形。

(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, radius=1.2)
ax.pie(vals2, radius=1)
ax.set(aspect="equal", title='Pie plot with `ax.pie`')
plt.show()

Python通过matplotlib画双层饼图及环形图简单示例

初战告捷!令我信心大增!
因此,在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, radius=1.2,autopct='%1.1f%%',pctdistance=0.9)
ax.pie(vals2, radius=1,autopct='%1.2f%%',pctdistance=0.5)
ax.set(aspect="equal", title='Pie plot with `ax.pie`')
#plt.legend()
plt.legend(labels,bbox_to_anchor=(1.05, 1), loc='best', borderaxespad=0.)
plt.show()

Python通过matplotlib画双层饼图及环形图简单示例

为方便,在这里没有对颜色、角度进行参数设置,后期若大家有兴趣,可以进一步加入不同参数再次设置。在这里主要说明的是:

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, radius=1.2,autopct='%1.1f%%',pctdistance=0.9)
ax.pie(vals2, radius=1,autopct='%1.1f%%',pctdistance=0.75)
ax.pie(vals3, radius=0.6,colors='w')
ax.set(aspect="equal", title='Pie plot with `ax.pie`')
#plt.legend()
plt.legend(labels,bbox_to_anchor=(1, 1), loc='best', borderaxespad=0.)
plt.show()

Python通过matplotlib画双层饼图及环形图简单示例

其原理为:绘制三个嵌套饼图,其中最里边的饼图,设置半径较小,整个饼图只有一个变量,因此不会分割,同时将背景色设置成白色colors='w',如此,大功告成!

实际上,还可以进一步延伸,绘制多层饼图、多层环形图,其原理都是绘制半径不同的pie,并设置不同的参数。

总结

以上就是本文关于Python通过matplotlib画双层饼图及环形图简单示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
详解Python中的__new__()方法的使用
Apr 09 Python
Python multiprocessing模块中的Pipe管道使用实例
Apr 11 Python
用Python实现一个简单的多线程TCP服务器的教程
May 05 Python
Python中处理字符串之isalpha()方法的使用
May 18 Python
详解Python发送邮件实例
Jan 10 Python
Python的Flask框架标配模板引擎Jinja2的使用教程
Jul 12 Python
Python实现简单生成验证码功能【基于random模块】
Feb 10 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
Dec 17 Python
详解Pandas之容易让人混淆的行选择和列选择
Jul 10 Python
python中绕过反爬虫的方法总结
Nov 25 Python
python爬虫框架feapde的使用简介
Apr 20 Python
python通过函数名调用函数的几种方法总结
Jun 07 Python
python绘制双柱形图代码实例
Dec 14 #Python
Python实现一个Git日志统计分析的小工具
Dec 14 #Python
用matplotlib画等高线图详解
Dec 14 #Python
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
Dec 14 #Python
python实现发送邮件功能代码
Dec 14 #Python
python正则实现计算器功能
Dec 14 #Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
Dec 14 #Python
You might like
php 8小时时间差的解决方法小结
2009/12/22 PHP
php判断手机访问还是电脑访问示例分享
2014/01/20 PHP
yii2实现 "上一篇,下一篇" 功能的代码实例
2017/02/04 PHP
php使用环形链表解决约瑟夫问题完整示例
2018/08/07 PHP
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
使用JavaScript实现网页版Pongo设计思路及源代码分享
2014/06/16 Javascript
使用JavaScript刷新网页的方法
2015/06/04 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
jquery动感漂浮导航菜单代码分享
2020/04/15 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
js对字符串进行编码的方法总结(推荐)
2016/11/10 Javascript
关于vue-router路径计算问题
2017/05/10 Javascript
解决vue-cli + webpack 新建项目出错的问题
2018/03/20 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
微信小程序上传多图到服务器并获取返回的路径
2019/05/05 Javascript
JavaScript实现图片轮播特效
2019/10/23 Javascript
vue-router 中 meta的用法详解
2019/11/01 Javascript
JavaScript面向对象核心知识与概念归纳整理
2020/05/09 Javascript
python中的闭包用法实例详解
2015/05/05 Python
Python request设置HTTPS代理代码解析
2018/02/12 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
ERLANG和PYTHON互通实现过程详解
2019/07/05 Python
python的json中方法及jsonpath模块用法分析
2019/12/06 Python
Python for循环通过序列索引迭代过程解析
2020/02/07 Python
HTML5和以前HTML4的区别整理
2013/10/20 HTML / CSS
达拉斯牛仔官方商店:Dallas Cowboys Pro Shop
2018/02/10 全球购物
英国鹦鹉店:Parrot Essentials
2018/12/03 全球购物
TheFork葡萄牙:欧洲领先的在线餐厅预订平台
2019/05/27 全球购物
美国和加拿大计算机和电子产品购物网站:TigerDirect.com
2019/09/13 全球购物
上课睡觉检讨书
2014/01/28 职场文书
2014自荐信的写作技巧
2014/01/28 职场文书
秸秆管理实施方案
2014/03/15 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
Golang 切片(Slice)实现增删改查
2022/04/22 Golang