画饼充饥

画饼充饥

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

用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
原文地址:https://www.cnblogs.com/duan-qs/p/6257865.html