zoukankan      html  css  js  c++  java
  • matplotlib 知识点11:绘制饼图(pie 函数精讲)

    饼图英文学名为Sector Graph,又名Pie Graph。常用于统计学模块。


    画饼图用到的方法为:matplotlib.pyplot.pie( )

    #!/usr/bin/env python
    #!-*-coding:utf-8 -*-
    #!@Author : Biyoulin
    #!@Time   : 2018/9/4 10:45
    
    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
    
    labels = ['娱乐','育儿','饮食','房贷','交通','其它']
    sizes = [2,5,12,70,2,9]
    explode = (0,0,0,0.1,0,0)
    plt.pie(sizes,explode=explode,labels=labels,autopct='%1.1f%%',shadow=False,startangle=150)
    plt.title("饼图示例-8月份家庭支出")
    plt.show()  

     上面的图形为椭圆形,可加入以下一条命令将之显示为长宽相等的饼图。

    plt.axis('equal')   #该行代码使饼图长宽相等

     



    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 函数参数详解,英文原版请参见:matplotlib官网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到指定的角度。

    pie()函数各参数示例:

    import matplotlib.pyplot as plt
    plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
    
    labels = 'A','B','C','D'
    sizes = [10,10,10,70]
    plt.pie(sizes,labels=labels)
    
    plt.title("饼图详解示例")
    plt.text(1,-1.2,'By:Biyoulin')
    plt.show()

    1、x:每一块饼图的比例,为必填项,如果sum(x)>1,会将多出的部分进行均分;

    sizes = [10,10,20,60]   

    2、labels : 每一块饼图外侧显示的说明文字;

    labels = 'A','B','C','Change'

    3、explode : 每一块饼图 离开中心距离,默认值为(0,0),就是不离开中心;

    explode = (0,0,0.1,0)  #将第三块分离出来

    4、colors:数组,可选参数,默认为:None;用来标注每块饼图的matplotlib颜色参数序列。如果为None,将使用当前活动环的颜色。

    colors = ['r','g','y','b']  #自定义颜色列表
    plt.pie(sizes,explode=explode,labels=labels,colors=colors)

    5、shadow :是否阴影,默认值为False,即没有阴影,将其改为True,显示结果如下图所示;

    plt.pie(sizes,explode=explode,labels=labels,colors=colors,shadow=True)  # 添加阴影

    6、autopct :控制饼图内百分比设置,可以使用format字符串或者format function;

      '%1.1f':指小数点后保留一位有效数值;

    plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.1f',shadow=True) 

    plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.2f%%',shadow=True) #保留两位小数点,增加百分号(%);

    7、startangle :起始绘制角度,默认图是从x轴正方向逆时针画起,如设定startangle=90则从y轴正方向画起; 

    plt.pie(sizes,explode=explode,labels=labels,
           colors=colors,autopct='%1.2f%%',shadow=True,startangle=30)

    8、counterclock:指定指针方向;布尔值,可选参数,默认为:True,即逆时针。将值改为False即可改为顺时针。

    plt.pie(sizes,explode=explode,labels=labels,
            colors=colors,autopct='%1.2f%%',shadow=True,startangle=30,counterclock=False) 

    9、labeldistance : label绘制位置,相对于半径的比例, 如<1则绘制在饼图内侧,默认值为1.1; 

    plt.pie(sizes,explode=explode,labels=labels,colors=colors,
            autopct='%1.2f%%',shadow=True,labeldistance=0.8,startangle=30,counterclock=False)

    10、radius :控制饼图半径;浮点类型,可选参数,默认为:None。如果半径是None,将被设置成1。 

    plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.2f%%',
            shadow=True,labeldistance=0.8,startangle=30,radius=1.3,counterclock=False)  

    11、pctdistance : 类似于labeldistance,指定autopct的位置刻度,默认值为0.6; 

    plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.2f%%',
            pctdistance=0.4,shadow=True,labeldistance=0.8,startangle=30,radius=1.3,counterclock=False) 

    12、textprops :设置标签(labels)和比例文字的格式;字典类型,可选参数,默认值为:None。

    plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.2f%%',
            pctdistance=0.4,shadow=True,labeldistance=0.8,startangle=30,radius=1.3,
            counterclock=False,textprops={'fontsize':20,'color':'black'})

    13、将饼图显示为正圆形,plt.axis( );

    plt.axis('equal')

    14、添加图例,plt.legend( );

    plt.legend(loc="upper right",fontsize=10,bbox_to_anchor=(1.1,1.05),borderaxespad=0.3)
    # loc =  'upper right' 位于右上角
    # bbox_to_anchor=[0.5, 0.5] # 外边距 上边 右边
    # ncol=2 分两列
    # borderaxespad = 0.3图例的内边距

    15、保存图表,plt.savefig( ); 

    plt.savefig("C:\饼图02.png",dpi=200,bbox_inches='tight')  

     1 #!/usr/bin/env python
     2 #!-*-coding:utf-8 -*-
     3 #!@Author : Biyoulin
     4 #!@Time   : 2018/9/4 16:43
     5 
     6 import matplotlib.pyplot as plt
     7 plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
     8 
     9 # labels = 'A','B','C','D'
    10 labels = 'A','B','C','Change'
    11 # sizes = [10,10,10,70]
    12 sizes = [10,10,20,60]
    13 explode = (0,0,0.1,0)
    14 colors = ['r','g','y','b']
    15 
    16 plt.pie(sizes,explode=explode,labels=labels,colors=colors,autopct='%1.2f%%',
    17         pctdistance=0.4,shadow=True,labeldistance=0.8,startangle=30,radius=1.3,
    18         counterclock=False,textprops={'fontsize':20,'color':'black'})
    19 
    20 plt.title("饼图详解示例")
    21 plt.text(1,-1.2,'By:Biyoulin')
    22 plt.axis('equal')
    23 plt.legend(loc="upper right",fontsize=10,bbox_to_anchor=(1.1,1.05),borderaxespad=0.3)
    24 # loc =  'upper right' 位于右上角
    25 # bbox_to_anchor=[0.5, 0.5] # 外边距 上边 右边
    26 # ncol=2 分两列
    27 # borderaxespad = 0.3图例的内边距
    28 
    29 plt.savefig("C:\饼图02.png",dpi=200,bbox_inches='tight')
    30 plt.show()
    饼图示例完整代码

    作者:biyoulin

    出处:http://www.cnblogs.com/biyoulin/

    版权声明:本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 

  • 相关阅读:
    使用iOS网络请求
    Invalid RNPermission 'ios.permission.xxx'. should be one of: ( )
    React Native 报错 Error: spawn EACCES 权限
    React Native 适配Android物理返回键,实现连续两次点击退出
    图解:平衡二叉树,AVL树
    NOIP 骗分技巧
    P1004 方格取数
    5. 最长回文子串
    全链路压测自动化实践
    深度学习在美团配送ETA预估中的探索与实践
  • 原文地址:https://www.cnblogs.com/biyoulin/p/9565350.html
Copyright © 2011-2022 走看看