zoukankan      html  css  js  c++  java
  • 画饼充饥

    画饼充饥

    饼图能反映单项数据占全体总数的百分比, 很形象地展现了分组占总体的比例.

    用pandas的序列就能很好地表现这种分组数据了.

    pieplot()函数: 绘制饼图

    编写该udf缘起

    • 个人不满意pyplot模块里的几个键参的默认设置, 可以说是太不满意了
      • 饼形图扇区的颜色太暗了, 影响了百分比数字的可读性, 需要改用亮色
      • 扇形的绘制起点和方向也不符合个人口味: 改为: 与excel的标准接轨(起点为12点, 方向为顺时针), 同时也可看得出pyplot的高度可定制性
      • x轴和y轴改为等距变化, 否则是椭圆而不是圆形的饼图
    • 后来又添加了点佐料:
      • 图名
      • 图名里添加了制图时间戳

    编后感:

    为pyplot的灵活性所折服
    还有在udf里设置了8种颜色的列表, 实际数据如果超过了8个, 则它会自动从头复制颜色表里的值来适应数据的个数. 太赞!
    向JOHN HUNTER致敬!

    示例: 一个投资组合的行业配置

    series=pd.Series([29,33,44,18, 12, 22,9,19,24, 47], 
                     index=[u'金融 ',u'地产',u'医药',u'有色金属',u'化工', 
                            u'能源',u'农林',u'零售',u'交运',u'传媒'])
    qs.pieplot(series)
    
    
    

    饼图

    
    reload(qs)
    n=18
    ser=Series(abs(randn(n)))
    ser.index= [qs.rands(5) for _ in xrange(n)] # 通过迭代和解析的方式, 创建一个常量列表
    ser.name='Portfoliou'
    qs.pieplot(ser)
    
    
    

    饼图升级版

    udf代码

    
    Signature: qs.pieplot(series, bsave_fig=False, png_fname=None)
    Source:
    def pieplot(series, bsave_fig=False, png_fname=None):
        u'''
        功能::
                把pd序列数据展现为饼图
        param::
                pd序列, 必须带索引, 索引将用作饼图的标签
                png_fname: 如果需要保存图片的话, 仅需要指定文件的存放目录和根名, 扩展名为png已经锁死
        example::
                series=pd.Series([2,3,4,8], index=[u'金融 ',u'地产',u'医药',u'有色金属'])
                pieplot(series)
                pieplot(series, True, 'd:mypngfilename')
    
        '''
    #     import matplotlib.pyplot as plt
        plt.pie(series.values, 
                labels=series.index,    
    #            colors=('b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'), 
                colors =('yellowgreen', 'gold', 'lightskyblue', 'lightcoral', 'm', 'y', 'pink', 'red'),  
                counterclock=False,
                startangle=90,
                autopct='%1.2f%%',
    #           frame=True,
    #           shadow=True,
                )
    # plt.axis() # 获取xy坐标轴的上下限, 返回4个长度的元组(xmin,xmax,ymin,ymax)
    #  默认地, 图形的纵横比为8:6的, 不适合绘制圆形图的, 
        plt.axis('equal'); # x轴y轴等距变化, 结尾的分号表示: 该变量的值不显示在notebook的"输出单元"里
        if bsave_fig:
            plt.savefig(png_fname+'.png')
    
    File:      c:documents and settingsadministratorduanqsscriptqs_udf.py
    Type:      function
    
  • 相关阅读:
    乐器、音乐与声学
    函数的功能与坐标轴的理解
    函数的功能与坐标轴的理解
    波、波长与频率
    波、波长与频率
    长方体的研究
    彻底理解线索二叉树
    SSH框架总结(框架分析+环境搭建+实例源代码下载)
    深入浅出WPF 第一部分(3)
    iPad 3g版完美实现打电话功能(phoneitipad破解)
  • 原文地址:https://www.cnblogs.com/duan-qs/p/6257865.html
Copyright © 2011-2022 走看看