用echarts绘制饼图---绘制南丁格尔玫瑰图

3,428 阅读2分钟

南丁格尔玫瑰图又名鸡冠花图、极坐标区域图,它将柱图转化为更美观的饼图形式,是极坐标化的柱图,放大了数据之间差异的视觉效果,适用于对比数据原本差异小的数据。 在ECharts中绘制南丁格尔玫瑰图时,参数与标准饼图类似,但是南丁格尔玫瑰图有一个特殊的参数是roseType,称为南丁格尔玫瑰图模式,可以使用的值有两种:“radius”(半径)和“area”(面积)。 当使用半径模式时,以各个item的值作为扇形的半径,一般情况下,半径模式可能造成较大的失真;当使用面积模式时,以各个item的值作为扇形的面积,一般情况下,面积模式的失真较小。

某高校二级学院学生和教授的人数数据如表所示。

image.png

根据某高校二级学院学生和教授的人数数据绘制南丁格尔玫瑰图,如图所示。

image.png

尽管在数据可视化作品中随处可见玫瑰图的身影,但是仍有许多用户给它贴上了“华而不实”的标签。事实上和许多图表一样,玫瑰图也有一些不足之处。玫瑰图的使用注意事项如下。 (1)适合展示类目比较多的数据。通过堆叠,玫瑰图可以展示大量的数据。对于类别过少的数据,则显得格格不入,建议使用标准饼图。 (2)展示分类数据的数值差异不宜过大。在玫瑰图中,数值差异过大的分类会非常难以观察,图表整体也会很不协调。这种情况推荐使用条形图。

(3)将数据做排序处理。如果需要比较数据的大小,那么可以事先将数据进行升序或降序处理,避免数据类目较多或数据间差异较小时不相邻的数据难以精确比较。为数据添加数值标签也是一种解决办法,但是在数据较多时难以达到较好的效果。有时对于看起来“头重脚轻”“不太协调”的玫瑰图,也可以手动设置数据的顺序,使图表更美观。不同的数据顺序,玫瑰图的效果也大大不同。 (4)慎用层叠玫瑰图。层叠玫瑰图存在的问题为:堆叠的数据起始位置不同,如果差距不大则难以直接进行比较。

源代码如下:

<html>

<head>
    <meta charset="utf-8">
    <!--引入ECharts脚本-->
    <script src="js/echarts.js"></script>
</head>

<body>
    <!---为ECharts准备一个具备大小(宽高)的DOM-->
    <div id="main" style="width: 800px; height: 600px"></div>
    <script type="text/javascript">
        //基于准备好的DOM,初始化ECharts图表
        var myChart = echarts.init(document.getElementById("main"));
        //指定图表的配置项和数据
        var option = {
            title: {
                text: '二级学院分布-南丁格尔玫瑰图',
                x: 'center',  //设置主标题全部居中
                backgroundColor: '#B5A642',  //设置主标题的背景颜色为黄铜色
                textStyle: {  //设置主标题
                    fontSize: 18,  //设置主标题的字号大小
                    fontFamily: "黑体",  //设置主标题的字体
                    color: "#9932CD"  //设置主标题的颜色为深兰花色
                },
            },
            tooltip: {  //配置提示框组件
                trigger: 'item',  //设置提示框的触发方式
                formatter: "{a} <br/>{b} : {c} ({d}%)"
            },
            legend: {  //配置图例组件
                x: 'center',
                y: 'bottom',
                data: ['计算机', '大数据', '外国语', '机器人', '建工', '机电', '艺术', '财经']
            },
            toolbox: {  //配置工具箱组件
                show: true,
                x: 600,  //设置工具箱的水平位置
                y: 18,  //设置工具箱的垂直位置
                feature: {
                    mark: { show: true },
                    dataView: { show: true, readOnly: false },
                    magicType: {
                        show: true,
                        type: ['pie', 'funnel']
                    },
                    restore: { show: true },
                    saveAsImage: { show: true }
                }
            },
            calculable: true,
            series: [  //配置数据系列及格式组件
                {  //设置第1个数据系列及格式设置
                    name: '学生人数(半径模式)',
                    type: 'pie',  //南丁格尔玫瑰图属于饼图中的一种
                    radius: ['10%', '50%'],  //设置半径
                    center: ['50%', 180],  //设置圆心
                    roseType: 'radius',  //设置南丁格尔玫瑰图参数:半径模式
                    width: '50%',  // for funnel 漏斗图
                    max: 40,  // for funnel 漏斗图
                    itemStyle: {
                        normal: {
                            label: {
                                show: false
                            },
                            labelLine: {
                                show: false
                            }
                        },
                        emphasis: {
                            label: {
                                show: true
                            },
                            labelLine: {
                                show: true
                            }
                        }
                    },
                    data: [
                        { value: 2000, name: '计算机' },
                        { value: 1500, name: '大数据' },
                        { value: 1200, name: '外国语' },
                        { value: 1100, name: '机器人' },
                        { value: 1000, name: '建工' },
                        { value: 900, name: '机电' },
                        { value: 800, name: '艺术' },
                        { value: 700, name: '财经' }
                    ]
                },
                {   //设置第2个数据系列及格式
                    name: '学生人数(面积模式)',
                    type: 'pie',  //南丁格尔玫瑰图属于饼图中的一种
                    radius: ['10%', '50%'],  //设置半径
                    center: ['50%', 180],  //设置圆心
                    roseType: 'area',  //设置南丁格尔玫瑰图参数:面积模式
                    x: '50%',  // for funnel 漏斗图
                    max: 40,  // for funnel 漏斗图
                    sort: 'ascending',  // for funnel 漏斗图
                    data: [
                        { value: 2000, name: '计算机' },
                        { value: 1500, name: '大数据' },
                        { value: 1200, name: '外国语' },
                        { value: 1100, name: '机器人' },
                        { value: 1000, name: '建工' },
                        { value: 900, name: '机电' },
                        { value: 800, name: '艺术' },
                        { value: 700, name: '财经' }
                    ]
                },
                {   //设置第3个数据系列及格式
                    name: '教授人数(面积模式)',
                    type: 'pie',  //南丁格尔玫瑰图属于饼图中的一种
                    radius: ['10%', '50%'],  //设置半径
                    center: ['50%', 420],  //设置圆心
                    roseType: 'area',  //设置南丁格尔玫瑰图参数:面积模式
                    x: '50%',  // for funnel 漏斗图
                    max: 40,  // for funnel 漏斗图
                    sort: 'ascending',  // for funnel 漏斗图
                    data: [
                        { value: 25, name: '计算机' },
                        { value: 15, name: '大数据' },
                        { value: 12, name: '外国语' },
                        { value: 10, name: '机器人' },
                        { value: 8, name: '建工' },
                        { value: 7, name: '机电' },
                        { value: 6, name: '艺术' },
                        { value: 4, name: '财经' }
                    ]
                }
            ]
        };
        //使用刚指定的配置项和数据显示图表
        myChart.setOption(option); 
    </script>
</body>

</html>