(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()

上图是在对饼图的模块颜色、标签、百分比、标题、角度、圆形半径,以及某一块凸出(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()

初战告捷!令我信心大增!

因此,在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()

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

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()

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

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

总结

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

python绘制饼图双层_Python通过matplotlib画双层饼图及环形图简单示例相关推荐

  1. python怎么画多重饼状图_Python通过matplotlib画双层饼图及环形图简单示例

    (1) 饼图(pie),即在一个圆圈内分成几块,显示不同数据系列的占比大小,这也是我们在日常数据的图形展示中最常用的图形之一. 在python中常用matplotlib的pie来绘制,基本命令如下所示 ...

  2. python画环形图_Python通过matplotlib画双层饼图及环形图简单示例

    摘要:这篇Python开发技术栏目下的"Python通过matplotlib画双层饼图及环形图简单示例",介绍的技术点是"matplotlib.Python.简单示例.饼 ...

  3. python画饼图程序_python使用matplotlib画饼状图

    本文实例为大家分享了python使用matplotlib画饼状图的具体代码,供大家参考,具体内容如下 代码与详细注释 from matplotlib import pyplot as plt #调节图 ...

  4. python绘制并列柱状图_Python之matplotlib画图:并列柱状图、饼图及环形图

    一.并列柱状图 堆积柱状图有堆积柱状图的好处,比如说我们可以很方便地看到多分类总和的趋势. 但是我们发现,在堆积柱状图中,由于基底位置的不同,我们并不能很轻易地弄清楚上方分类的数据的变化趋势. 因此当 ...

  5. python绘制三维曲线图_Python基于matplotlib实现绘制三维图形功能示例

    本文实例讲述了Python基于matplotlib实现绘制三维图形功能.分享给大家供大家参考,具体如下: 代码一: # coding=utf-8 import numpy as np import m ...

  6. python绘制蚊香形_python之turtle画蚊香

    原理:利用turtle绘制圆形,并使圆半径逐步增加 代码如下: import turtle turtle.pensize(30) for i in range(30): turtle.circle(i ...

  7. 用python绘制柱状图模版_python使用matplotlib绘制柱状图教程

    Matplotlib的概念这里就不多介绍了 小编之前也和大家分享过python使用matplotlib实现的折线图和制饼图效果,感兴趣的朋友们也可以点击查看,下面来看看python使用matplotl ...

  8. python绘制余弦曲线图_Python使用matplotlib绘制正弦和余弦曲线的方法示例

    本文实例讲述了Python使用matplotlib绘制正弦和余弦曲线的方法.分享给大家供大家参考,具体如下: 一 介绍 关键词:绘图库 二 代码 import numpy as np import m ...

  9. python绘制音频频谱_Python 读取wav画频谱

    Python 读取wav音频文件,并用specgram画频谱 import wave import struct from scipy import * from pylab import * #读取 ...

最新文章

  1. SBB:南土所褚海燕组-pH主导土壤中固氮群落的共存与装配
  2. 与Susan Fowler探讨生产就绪微服务之问答
  3. relu与maxpool
  4. Idea debugger 无法启动-unable to open debugger port , java.net.SocketException socket closed
  5. Python a,b = b,a 是怎么赋值的
  6. C语言:输入两个数,输出最大公约数,最小公倍数
  7. 安装CocoaPod
  8. SAP Spartacus cxOutlet 里的 templatesRefs 的填充逻辑
  9. Fiori应用里application dependency里奇怪的manifest url是从哪来的
  10. C#重写Equals方法步骤
  11. 解决:Field xxMapper in xx.service.impl.xxServiceImpl required a bean of type ‘xx.mapper.xxMapper‘
  12. .Net框架集WebClient类向WinCE平台上传文件(FTP方式)延迟15秒释疑
  13. Ubuntu10.04设备未托管
  14. 【批处理学习笔记】第二十五课:间接传递
  15. matlab衰减指数的程序是,如何用MATLAB仿真单指数衰减振荡波
  16. Apizza 升级了,更好的 api 接口管理和文档编写,欢迎大家访问吐槽!!
  17. Nvivo 12 Plus WIN版本丨中文英文 软件安装包下载 安装教程步骤丨WIN系统
  18. python3调用arcpy地理加权回归_混合地理加权回归python实现代码
  19. 加工中心宏程序c语言,加工中心最实用的宏程序
  20. payjs 源码_ZFAKA发卡系统用宝塔安装详细图文教程+对接Payjs个人支付版本

热门文章

  1. 英文版mysql导入导出_mysql命令行导出,导入数据库
  2. 计算机通信技术论文,计算机通信技术专业论文选题 计算机通信技术论文题目如何取...
  3. nfs服务器之间实现目录共享
  4. android手机备份恢复出厂设置密码,华为手机恢复出厂设置密码多少呢?
  5. 电子芯吧客首届PCB书签设计大赛
  6. 浅析Java语言中两种异常的差别
  7. 【Python】条件语句、循环语句、pass语句的使用
  8. matlab只能运行两次,[求助]先后两次运行,一次报错一次不报错是为何?
  9. 2021年中国精装修木地板配套市场发展现状:配置率为94.9%,碧桂园配套规模最大,项目最多[图]
  10. 用上市公司2019年报净利润数据验证本福特定律