画饼充饥
饼图能反映单项数据占全体总数的百分比, 很形象地展现了分组占总体的比例.
用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