前面所介绍的一些图例更多的是展示数据本身数值的大小,而饼状图不一样,更侧重于展示数据的相对大小。
首先我们得到每年该股票的成交笔数总和,然后直接进行饼状图绘制:
results = frame[[‘成交笔数’]].groupby(frame.index.year).sum()
plt.pie(results[‘成交笔数’])
plt.show()
从中可以明显看出不同年份占据的比例,也就是相对大小,具体数值的绝对值大小往往不能有效的直观反映。
为了将数据展示的更为清楚,我们可以加上必要的数据信息:
plt.pie(results[‘成交笔数’], labels=results.index, autopct=’%3.1f%%’)
plt.show()
这里的labels用于显示每个饼块的标签,autopct可以设置每个饼块的占比数值及其格式,这里3表示三位整数,1表示一位小数,后面再加一个百分号,前后的百分号用于标记。
大家要注意,第一个年份2011是从0度方向开始,直至逆时针环绕一圈。
此时也可以调整下字体,以更适合显示效果:
plt.pie(results[‘成交笔数’], labels=results.index, autopct=’%3.1f%%’,
textprops={‘color’: ‘b’, ‘size’: 15, ‘weight’: ‘bold’})
plt.show()
其中的textprops中使用字典分别设置了颜色、大小和黑体。
当然具体效果要综合实际搭配才能看的出来。
和前面图形一样,饼状图也提供了显示多种数据的途径。比如我们可以利用饼块与中心的分离距离来表示其他数据:
results = frame.groupby(frame.index.year).agg(sum=(‘成交笔数’, ‘sum’), avg=(‘换手率’, ‘mean’))
plt.pie(results[‘sum’], explode=results[‘avg’]/results[‘avg’].max(), labels=results.index, autopct=’%3.1f%%’)
plt.show()
这里我们也获取了换手率的年度平均值,按照与它最大值之比,设置为饼块与中心的分离距离。
从结果可以看到,离中心越远的,换手率越大,比如2011年和2015年的最大,也最远。explode效果非常不错,特别用于突出显示其中明显的数据块。
也可以使用柱状图中利用颜色表示数据大小的方式:
plt.pie(results[‘sum’], colors=cm.ScalarMappable().to_rgba(results[‘avg’]), labels=results.index, autopct=’%3.1f%%’)
sm = plt.cm.ScalarMappable(norm=plt.Normalize(vmin=results[‘avg’].min(), vmax=results[‘avg’].max()))
plt.colorbar(sm)
plt.show()
这里仍然能够看出2011年和2015年换手率最大。
饼状图还可以使用一种较为有效的重叠显示方式来展示更多数据。我们可以首先可以先将现有饼图收缩下:
plt.pie(results[‘sum’], wedgeprops={‘width’: 0.2, ‘edgecolor’: ‘w’}, labels=results.index, autopct=’%3.1f%%’)
plt.show()
其中,wedgeprops属性中的width宽度就是说明将现有饼块的半径保留到0.2。
从图中可以看出,从外面向圆心保留20%,成为一个扇形,边为白色。
但是原有的文字标签还是居中对齐,位于整个圆心半径的中间。
为此可以再次调整标签的位置:
plt.pie(results[‘sum’], pctdistance=0.9, wedgeprops={‘width’: 0.2, ‘edgecolor’: ‘w’}, labels=results.index, autopct=’%3.1f%%’)
plt.show()
大家可以想一想,0.9这个单位正好位于20%的中间。
图中看的很清楚,其实大家可以自己多尝试来调节出更多的实际效果。
我们在里面再增加一个扇形:
plt.pie(results[‘avg’], pctdistance=0.5, radius=0.8, autopct=’%3.1f%%’)
plt.show()
这里的关键是设置饼块的半径,0.8表示80%,正好嵌入在刚才圆形中间的空白处。pctdistance为0.5表示标签居中显示。
也可以将里面的扇形也通过缩小的方式来设置:
plt.pie(results[‘avg’], pctdistance=0.85, wedgeprops={‘width’: 0.2, ‘edgecolor’: ‘w’}, radius=0.8, autopct=’%3.1f%%’)
plt.show()
这里的方法不变,大家能看出设置的技巧吗?可以自己大胆调节尝试下。
数据为:http://njcie.com/python/股票数据.csv