热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

python教程分享Python+matplotlib绘制饼图和堆叠图

饼图常用于统计学模块,画饼图用到的方法为:pie()一、pie()函数用来绘制饼图pie(x,explodenone,labelsnone,colorsnone,autopctno

饼图常用于统计学模块,画饼图用到的方法为:pie( )

一、pie()函数用来绘制饼图

pie(x, explode=none, labels=none, colors=none, autopct=none, pctdistance=0.6, shadow=false, labeldistance=1.1, startangle=0, radius=1, counterclock=true, wedgeprops=none, textprops=none, center=0, 0, frame=false, rotatelabels=false, *, normalize=none, data=none)

pie()函数参数较多,需要我们调整的常见为以下几个

x: 每个扇形的占比的序列或数组

explode :如果不是none,则是一个len(x)长度的数组,指定每一块的突出程度;突出显示,设置每一块分割出来的间隙大小

labels:为每个扇形提供标签的字符串序列

colors:为每个扇形提供颜色的字符串序列

autopct :如果是一个格式字符串,标签将是fmt % pct。如果是一个函数,它将被调用。

shadow:阴影

startangle:从x轴逆时针旋转,饼的旋转角度  参数用法,可以去官网查询,并自己多去偿试。

二、一个简单的例子

统计每天休息、工作、娱乐等时间的百分比

import matplotlib.pyplot as plt    slices = [7,2,9,3,3]  activities = ['sleeping','eating','working','studing','playing']  cols = ['r','m','y','c','b']    plt.pie(slices,          labels=activities,          colors=cols,  #自定义的颜色序列,对比slices,可多可少,少时自动补充,如没有,则默认不同颜色。          startangle=90,          shadow= true,           explode=(0,0.1,0,0,0.2),#占比突出程度,          autopct='%1.1f%%' #百分比的显示格式          )    plt.title('time statistics')  plt.show()

实际运行结果:

Python+matplotlib绘制饼图和堆叠图

注意:startangle=90时的开始位置。整个饼图是从0度(圆心向右方向)逆时针分布的。

那继续用上篇创建的2个色子,来实现一个饼图。

思考:上述饼图代码中最能决定饼图形状的参数是slices = [7,2,9,3,3],在不考虑每个占比名称、美观等的情况下,先确定如何实现slices中的各数值。

比如,当投掷2粒色子(一个8个面,一个6个面)时,1000000次时,分别统计出现点1、2、3、4、5……14的总次数,保存到slices中即可。用数列中的统计方法 list.count()即可。

主要就是增加两行代码:

new_slices=[] # 新建一个数列    while side <= max_result:       side += 1       new_bins.append(side) #这是之前做柱状图需要用到的      new_slices.append( results.count(int(side))  ) #将保存两色子之和的数列,直接进行统计,results.count(int(side))就是在results的数列中统计出现side的次数。

运行结果,一样也是显示出点数之和7,8,9的出现的次数最多,然后逐渐减小:

Python+matplotlib绘制饼图和堆叠图

总之,饼图通过将一个圆按照分类的占比划分成多个区块,整个圆饼代表数据的总量,每个区块表示该分类占总体的比例大小,所有区块的加和等于100%。

三、 堆叠图

使用matplotlib中的stackplot()函数可以快速绘制堆积图,stackplot()函数的语法格式如下所示

stackplot(x, y, labels=(), baseling=&#39;zero&#39;, data=none, *args, **kwargs)

该函数常用参数的含义如下   

x:表示x轴的数据,可以是一维数组。   

y:表示y轴的数据,可以是二维数组或一维数组序列。  

labels:表示每组折线及填充区域的标签。   

baseline:表示计算基线的方法,包括&#39;zero&#39;、&#39;sym&#39;、&#39;wiggle&#39;和&#39;weighted_wiggle&#39;。

其中:

&#39;zero&#39;表示恒定零基线,即简单的堆积图;

&#39;sym&#39;表示对称于零基线;

&#39;wiggle&#39;表示最小化平方斜率的总和;

&#39;weighted_wiggle&#39;表示执行相同的操作,但权重用于说明每层的大小。

用同一个例子来看一下堆叠图的效果,代码如下:

import matplotlib.pyplot as plt    days =    [1,2,3,4,5,6,7]    sleeping =[7,8,6,8,7,8,6]  eating  = [2,3,3,3,2,2,2]  working = [7,7,7,8,10,3,4]  studing = [6,4,4,4,3,8,11]  playing = [2,2,4,1,2,3,1]    labellist = ['sleeping','eating','working','studing','playing']  colorlist = ['c','y','b','r','g']    plt.stackplot(days, sleeping,eating,working,studing,playing,labels=labellist,colors=colorlist)  plt.xlabel('x')  plt.ylabel('y')  plt.legend(loc=(0.07, 0.05))  plt.title('stack plots')  plt.show()

运行结果如下:

Python+matplotlib绘制饼图和堆叠图

plt.legend()是显示左下角的标签。而语句plt.stackplot()函数中的sleeping,eating,working,studing,playing是一维数组序列,即stackplot(x,y……)中的y值,是一系列一维数据。

 很明显,通过上述饼图与堆叠图的对比,它们的区别:饼图只能展示一段时间里,某个项目所花时间占总时间的比,而堆叠图可以展示这一段时间里,每天各项所花费时间。

既然sleeping,eating,working,studing,playing形成的一维数组,感觉参数比较多,那直接形成一个二维数组如何?做如下修改:

days =    [1,2,3,4,5,6,7]  """  sleeping =[7,8,6,8,7,8,6]  eating  = [2,3,3,3,2,2,2]  working = [7,7,7,8,10,3,4]  studing = [6,4,4,4,3,8,11]  playing = [2,2,4,1,2,3,1]  """  times =[                   # 二维数组,以数列作为元素的数列。          [7,8,6,8,7,8,6],   #上述sleeping数列          [2,3,3,3,2,2,2],          [7,7,7,8,10,3,4],          [6,4,4,4,3,8,11],          [2,2,4,1,2,3,1]          ]  plt.stackplot(days, times,labels=labellist,colors=colorlist)

运行结果如图:

Python+matplotlib绘制饼图和堆叠图

效果与原来的一维数组一样。

但手工这样编程的时候录入数据太过麻烦,下篇介绍直接读取文件数据并进行处理。

以上就是python+matplotlib绘制饼图和堆叠图的详细内容,更多关于python matplotlib饼图 堆叠图的资料请关注<编程笔记>其它相关文章!

需要了解更多python教程分享Python+matplotlib绘制饼图和堆叠图,都可以关注python教程分享栏目&#8212;编程笔记


推荐阅读
  • PyQt 如何创建自定义QWidget
    这篇文章主要介绍了PyQt如何创建自定义QWidget,帮助大家更好的理解和学习使用pyqt,感 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 上一篇《手把手教你用深度学习做物体检测(三):模型训练》中介绍了如何使用yolov3训练我们自己的物体检测模型,本篇文章将重点介绍如何使用我们训练好的模型来检测图片或视频中的物体 ... [详细]
  • K-Means算法原理
    原理给定样本集,k-means算法得到聚类,使得下面平方误差最小其中表示聚类的中心点。实现上式最小化是一个NP难问题,实际上采用EM算法可以求得近似解。算法伪代码如下输入:,聚 ... [详细]
  • 浅谈Python3中打开文件的方式(With open)
    浅谈Python3中打开文件的方式(With open)-目录0.背景知识1.常规方式:读取文件-----open()2.推荐方式:读取文件-----WithOpen1).读取方式 ... [详细]
  • Python多进程遇到的问题
    多进程共享对象我有一个IpConnectionPool对象需要多个进程共享创建BaseManager注册Ip ... [详细]
  • fromkeras.modelsimportSequentialfromkeras.layersimportDense,Dropoutfromkeras.layersimp ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • 今天就跟大家聊聊有关怎么在Android应用中实现一个换肤功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根 ... [详细]
  • Highcharts翻译系列之二十:曲线图例子(二)
    Highcharts翻译系列之二十:曲线图例子(二)代码 ... [详细]
  • 开发笔记:小白python机器学习之路——支持向量机
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了小白python机器学习之路——支持向量机相关的知识,希望对你有一定的参考价值。支持 ... [详细]
  • 记录一些 Latex 的技巧
    Latex一些技巧:1.如何创建不浮动的的figure和table\makeatletter\newcommand{\figcaption}{\def\captyp ... [详细]
  • 我正在使用ChemDoodleWebComponents在网页上显示分子。基本上,我可以在我的页面中插入以下脚本,它将创建一个HTML5canvas元素来显示分子。vartrans ... [详细]
  • 这篇文章给大家分享的是有关python3怎样中文转换编码的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。示例:处理 ... [详细]
author-avatar
pacer猫处
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有