任务描述

本关任务:绘制嵌套饼状图。

相关知识

饼状图,顾名思义,形状为圆型的图。饼状图算是统计学中一种古老的图形了,也是数据可视化中非常常见的图形。饼状图的核心特点是能够展示数据的比例情况,通过不同的颜色在圆中的面积大小,可以一眼看出各个数据的分布情况。

在学习本实训之前,强烈建议先学习Echarts系列的前三个实训。

标准饼状图

我们先对标准的饼状图的样子有一个概念,如下所示:

图  1


图 1 标准饼状图

饼状图的画法和柱状图以及折线图的区别较大。首先,很显然的是,饼状图里不存在x轴和y轴了,所以xAxisyAxis这两个属性都不需要设置了,其次,饼状图的中的数据表示的是比例值(当然Echarts支持使用绝对值,它会自动帮你换算成绝对值,但是很多时候我们拿到的原始数据是比例值)。最后,饼状图可以设置一些独有的属性,比如圆的半径。

下面看一个简单的饼状图代码:

 
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>ECharts</title>
  6. <!-- 引入 echarts.js -->
  7. <script type="text/JavaScript" src="../static/echarts.min.js"></script>
  8. <body>
  9. <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
  10. <div id="main" style="width: 600px;height:400px;"></div>
  11. <script type="text/javascript">
  12. var myChart = echarts.init(document.getElementById('main'));
  13. myChart.setOption({
  14. title : {
  15. text : "2020年百强县分布"//标题
  16. },
  17. tooltip : {
  18. },
  19. legend: {
  20. data:['江苏省', '山东省','浙江省','其它']//图例
  21. },
  22. series : [
  23. {
  24. name:'分布',//数据的名字
  25. type:'pie',//表示柱状图
  26. radius:'80%',//圆的半径
  27. data:[
  28. {value: 25, name: '江苏省'},
  29. {value: 13, name: '山东省'},
  30. {value: 18, name: '浙江省'},
  31. {value: 44, name: '其它'}
  32. ]
  33. }
  34. ]
  35. });
  36. // 使用刚指定的配置项和数据显示图表。
  37. myChart.setOption(option);
  38. </script>
  39. </body>
  40. </html>

仔细观察配置项,可以发现一些关联的地方,帮助我们理解饼状图的画法。data中的name的值是和legend中的某一项匹配的,因为图例必须要对应上饼状图中具体的一块。

最后画出来的图如下所示:

图  1


图 2 标准饼状图绘制结果

圆环图

圆环图就是把标准饼状图中的圆改为圆环,其在代码上的改动很小,就是将上面的代码中的series中的radius从一个数字radius:'80%'改为两个数字radius:['60%','80%'],左边的表示内圆的半径,右边表示外圆的半径,这样就构成了一个圆环。

按照上面的改法画出来的圆环图如下所示:

图  1


图 3 圆环图

嵌套饼状图

嵌套饼状图,顾名思义,就是饼状图里面嵌套了一个饼状图。当然,外层的饼状图只能是圆环图,内层既可以是标准饼状图,也可以是圆环图。

嵌套圆环图有两组数据,一组是内层的数据,一组是外层的数据,外层数据是对内层数据的细化,内层的一项可以在外层对应一项或者几项。而且,外层的这“一项或者几项”对应的圆心角的和与内层相同。

这两组数据分别作为两个object{}里面的叫一个object)放在series中即可。通过它们的半径判断出哪个是内层,哪个是外层,而无需显示的指定。

代码如下所示:

 
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>ECharts</title>
  6. <!-- 引入 echarts.js -->
  7. <script type="text/JavaScript" src="../static/echarts.min.js"></script>
  8. <body>
  9. <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
  10. <div id="main" style="width: 600px;height:400px;"></div>
  11. <script type="text/javascript">
  12. var myChart = echarts.init(document.getElementById('main'));
  13. myChart.setOption({
  14. title : {
  15. text : "2020年百强县分布"//标题
  16. },
  17. tooltip : {
  18. },
  19. legend: {
  20. orient:'vertical',//设置图例为垂直方向
  21. x: 1,//设置图例在x轴的起点
  22. y: 30,//设置图例在y轴的起点
  23. data:['江苏省', '山东省','浙江省','其它', '苏南', '苏中', '苏北', '青烟威', '除青烟威外其它', '杭甬', '除杭甬外其它', '其它城市']//图例
  24. },
  25. series : [
  26. {
  27. name:'分布',//数据的名字
  28. type:'pie',//表示柱状图
  29. radius:['10%', '30%'],
  30. data:[
  31. {value: 25, name: '江苏省'},
  32. {value: 13, name: '山东省'},
  33. {value: 18, name: '浙江省'},
  34. {value: 44, name: '其它'}
  35. ]
  36. },
  37. {
  38. name:'分布2',//数据的名字
  39. type:'pie',//表示柱状图
  40. radius:['40%', '60%'],
  41. data:[
  42. {value: 11, name: '苏南'},
  43. {value: 9, name: '苏中'},
  44. {value: 5, name: '苏北'},
  45. {value: 5, name: '青烟威'},
  46. {value: 8, name: '除青烟威外其它'},
  47. {value: 7, name: '杭甬'},
  48. {value: 11, name: '除杭甬外其它'},
  49. {value: 44, name: '其它城市'}
  50. ]
  51. }
  52. ]
  53. });
  54. // 使用刚指定的配置项和数据显示图表。
  55. myChart.setOption(option);
  56. </script>
  57. </body>
  58. </html>

显然,我们的内层和外层但是圆环图,内层的内半径和外半径分别是10%30%,内层的内半径和外半径分别是40%60%

最后画出来的效果如下所示:

图  1


图 4 嵌套圆环图

编程要求

根据提示,在右侧编辑器BeginEnd之间补充代码(有两处),这段代码画出来的是一个饼状图,你补充的代码需要保证内层是一个标准饼状图,它的半径是40%。外层是一个嵌套饼状图,它的内半径和外半径分别是60%80%

测试说明

我们将调用浏览器接口,打开你修改的这段代码生成的网页,并截图获取其中的图像,和正确的图像进行对比,从而判断你补充的程序是否正确,正确将输出:“图像对比一致,恭喜通关!”

同时我们将展示你生成的图像和正确的图像,你可以通过观察图像的方式修改自己尚未通过的代码。

测试输入: 预期输出:图像对比一致,恭喜通关!

代码文件

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>ECharts</title>
    <!-- 引入 echarts.js -->
	<script type="text/JavaScript" src="../static/echarts.min.js"></script>
<body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 600px;height:400px;"></div>

    <script type="text/javascript">
    var myChart = echarts.init(document.getElementById('main'));
    myChart.setOption({
        title : {
            text : "2020年百强县分布"//标题
        },
        tooltip : {
        },
        legend: {
            orient:'vertical',
            x: 1,
            y: 30,
            data:['江苏省', '山东省','浙江省','其它', '苏南', '苏中', '苏北', '青烟威', '除青烟威外其它', '杭甬', '除杭甬外其它', '其它城市']//图例
        },
        series : [
             {
                 name:'分布',//数据的名字
                 type:'pie',//表示柱状图
                 /******** Begin *********/
                    radius:['0%','40%'],

                 /******** End *********/
                 data:[
                    {value: 25, name: '江苏省'},
                    {value: 13, name: '山东省'},
                    {value: 18, name: '浙江省'},
                    {value: 44, name: '其它'}
                 ]
             },
             {
                 name:'分布2',//数据的名字
                 type:'pie',//表示柱状图
                 /******** Begin *********/
                    radius:['60%','80%'],

                 /******** End *********/
                 data:[
                    {value: 11, name: '苏南'},
                    {value: 9, name: '苏中'},
                    {value: 5, name: '苏北'},
                    {value: 5, name: '青烟威'},
                    {value: 8, name: '除青烟威外其它'},
                    {value: 7, name: '杭甬'},
                    {value: 11, name: '除杭甬外其它'},
                    {value: 44, name: '其它城市'}
                 ]
             }
         ]
    });

    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);

    </script>
</body>
</html>

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐