我的系统环境不知道什么原因用不了Pyecharts1.0以上的版本(Python版本是3.6.5,各种模块调用失败),故只得使用0.5.11的版本。
在一次实例中需要用到一个父子关系及其在相应类别中比例的展示,日落图(Sunburst)显然是一个比较适合的图表。
然而,官方文档表示:
version 1.1.0 - 2019.5.14
Add
- issue#1052,issue#1065 新增 BMap 图形种类
- issue#1078,issue#396 新增 Sunburst 图形种类
- issue#1112 Page 类新增 render_embed 方法
- ···
也就是说,Sunburst这个图表类型是在1.1.0这个版本中才加入的,0.5.11不能使用。无奈,因为也就是性别和婚姻的情况,如果用柱状图的stack会显得比较单调,最后是采用了:饼图嵌套
我所谓的饼图嵌套是指:在一个pie=Pie( ) 中,同时创建多个pie.add( ),因为饼图是支持对多个图形进行center[x,y]定位的,所以你可以创建多个图表项,然后设定他们的圆心坐标相同,比如默认都是[50,50],然后设置不同图形的半径范围不同。例如最里的图radius=[5,15],次圈为radius=[20,30],其中15-20的5的单位的空白即是两个饼图的间隙(留白),最后得到的效果就是一个嵌套的图形。
当然,Echarts官网给出的“饼图嵌套”是更好的,它能继承父子的关系(也就是在我这个现在这个饼图中(下例)可以实现:男性婚姻情况可以只对应更里层的男性),当然了,也许用我这样的方法通过调整相关参数也可以实现Echarts官方“饼图嵌套”的效果,但因为我的这个解决方案已经满足我的需求了所以就没暂时没有深究。
Echarts“饼图嵌套示例”:https://echarts.baidu.com/examples/editor.html?c=pie-nest
我的效果示例:
代码也附上:
from pyecharts import Pie
a1 = ["男性", "女性"]
v1 = [459,66]
a11=["已婚员工","未婚员工"]
v11=[336,189]
a21=["男-已婚","男-未婚"]
v21=[285,174]
a22=["女-已婚","女-未婚"]
v22=[51,15]
pie= Pie('Pycharts饼图嵌套示例','示例',title_pos='center',title_text_size=20,subtitle_color= '#000',subtitle_text_size=16,height=500)
pie.add('', a1, v1, center=[50,55],radius=[5,20],is_random=True,
is_label_show=True,label_text_size=13,label_pos='bottom',
legend_pos='left',is_more_utils=True,rosetype='radius'
,label_emphasis_pos='top',label_emphasis_textcolor='',label_emphasis_textsize=30
)
pie.add('',a11, v11, center=[50,55],radius=[25,40] ,
is_label_show=True,label_text_size=13,label_pos='top',
legend_pos='left',rosetype='radius',label_emphasis_pos='top'
,label_emphasis_textcolor='',label_emphasis_textsize=30
)
pie.add('',a21, v21, center=[50,55],radius=[45,60] ,label_pos='right',
is_label_show=True,label_text_size=13,legend_pos='left',rosetype='radius'
,label_emphasis_pos='top',label_emphasis_textcolor='',label_emphasis_textsize=30)
pie.add('',a22, v22,center=[50,55], radius=[65,80] ,label_pos='left',
is_label_show=True,label_text_size=13,
legend_pos='left',legend_top='center',rosetype='radius',legend_orient="vertical"
,label_emphasis_pos='top',label_emphasis_textcolor='',label_emphasis_textsize=30)
pie.render()
至于里面的参数,查一下也就知道了。这里附上Pyecharts的0.5+版本的官方文档,相关参数可以参阅:https://05x-docs.pyecharts.org/#/
对了,rosetype的类型也可以改为'area',然而效果不好,有兴趣的可以自己试一试。