echarts地图和散点图同时缩放_EChats 入门级散点图

这次业务需要一张地理散点图,于是接触到了EChats,基于业务简单记录一下

18917c7aeeb23a3cc214d4eec7a32bfa.png

最终实现的效果如图,DEMO地址:Examples - Apache ECharts (incubating)

(顺带吐槽Apache无孔不入)

实现这张散点图,需要接触到EChats的文档:ECharts Documentation

期间我需要的属性简单梳理一下(主属性下的子属性在ECharts Documentation都可以找到用法及注解):

1.option:可以理解为图上所有元素的集合

option = {
        backgroundColor: '#a7c0e0',
        title: {
            show: true,
            text: '全国主要城市存货量',
            subtext: 'data from CMS',
            sublink: 'http://www.pm25.in',
            left: 'center',
            textStyle: {
                color: '#fff'
            }
        },
        tooltip: {
            trigger: 'item',
            formatter: function (params, ticket, callback) {
                return params.name + "-----货量:" + data.Data[params.dataIndex].value;
            }
        },
        geo: {
            map: 'china',
            label: {
                emphasis: {
                    show: true
                }
            },
            roam: true,
            itemStyle: {
                normal: {
                    areaColor: '#F4F2EF',
                    borderColor: '#C0DBB8'
                },
                emphasis: {
                    areaColor: '#C0DBB8'
                }
            }
        },
        series: series
    };

backgroundColor:图例的底色

title:图例的标题(插一句闲话,小时候刚学title这个单词的时候觉得音同“抬头”,感觉和title的本意很贴切,于是这个词成了我小时候记住的为数不多的单词之一)

40b1840e187d43214f5127ac854f50b2.png

tooltip:浮窗,其中内容以及触发方式都可以自定义

4bee13551890e44a4856929a821f2293.png

geo:地图属性,包括地图范围,显示内容,颜色等都可以进行自定义

series:系列列表,我的理解是,如果option是图例的大致轮廓自定义,那series就是细化到最小模块的自定义,不要走开,分割线后更精彩


2.series:系列列表,每个系列通过 type 决定自己的图表类型

series.push(
        {
            name: 'Top 5',
            type: 'effectScatter',
            effectType: 'ripple',
            coordinateSystem: 'geo',
            //hoverAnimation: true,
            showEffectOn: 'emphasis',
            zlevel: 2,
            rippleEffect: {
                brushType: 'stroke'
            },
            label: {
                normal: {
                    show: true,
                    position: 'right',
                    formatter: function (params, ticket, callback) {
                        return "Top" + (params.dataIndex + 1) + ":" + params.name;
                    }
                }
            },
            symbolSize: function (val) {
                return 15;
            },
            itemStyle: {
                normal: {
                    color: '#9370DB',
                    shadowBlur: 10,
                    shadowColor: '#333'
                }
            },
            data: convertData(data.Data.sort(function (a, b) {
                return b.value - a.value;
            }).slice(0, 5))
        },
        {
            name: '',
            type: 'effectScatter',
            coordinateSystem: 'geo',
            zlevel: 2,
            rippleEffect: {
                brushType: 'stroke'
            },
            hoverAnimation: true,
            symbolSize: function (val) {
                return 5;
            },
            showEffectOn: 'emphasis',
            rippleEffect: {
                brushType: 'stroke'
            },
            //label: {
            //    normal: {
            //        formatter: '{b}',
            //        position: 'right',
            //        show: true
            //    }
            //},
            itemStyle: {
                normal: {
                    color: '#9370DB'
                }
            },
            data: data.Data.map(function (dataItem) {
                return {
                    name: dataItem.name,
                    value: geoCoordMap[dataItem.name],
                };
            })
        });

下面由type为effectScatter的元素为例:

name:列表名,可写可不写

type:决定该列表的类型

effectType:特效类型,目前只有一种涟漪特效

coordinateSystem:该系列使用的坐标系,可选:

  • 'cartesian2d'
    使用二维的直角坐标系(也称笛卡尔坐标系),通过 xAxisIndex, yAxisIndex指定相应的坐标轴组件。
  • 'polar'
    使用极坐标系,通过 polarIndex 指定相应的极坐标组件
  • 'geo'
    使用地理坐标系,通过 geoIndex 指定相应的地理坐标系组件。

hoverAnimation:鼠标事件,可以自定义触发形式,如点击,经过,焦点变动等

showEffectOn:配置何时显示特效,可选:

  • 'render' 绘制完成后显示特效。
  • 'emphasis' 高亮(hover)的时候显示特效。

zlevel:图形的 zlevel 值,我的理解是在图例分层(图层显示优先级),zlevel值小的图形会被zlevel值大的图形覆盖。

rippleEffect:特效详细配置,见文档ECharts Documentation

label:每一个散点后的显示文字配置

8368175157d72678deff96186ac03cad.png

symbolSize:散点大小配置

itemStyle:散点样式配置,包括颜色阴影等

data:数据,从后台得到,表示散点所代表的意义,根据业务灵活运用


3.注意事项

html页引用js

<script type="text/javascript" src="@Url.Content("~/Scripts/HeatMapForCMS/package/dist/echarts.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/HeatMapForCMS/package/dist/echarts-gl.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/HeatMapForCMS/package/dist/ecStat.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/HeatMapForCMS/package/dist/extension/dataTool.min.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/HeatMapForCMS/package/map/js/china.js")"></script>
<script type="text/javascript" src="@Url.Content("~/Scripts/HeatMapForCMS/package/map/js/world.js")"></script>

html页代码:

<div class="row" style="height:680px">
      <div id="container" style="width: 100%;height:100%;padding-left:5px;padding-right:5px"></div>
      <script src="@Url.Content("~/Scripts/HeatMapForCMS/HeatMapForCMS.js")" charset="GB2312"></script>
</div>

.js文件代码:

var dom = document.getElementById("container");
var myChart = echarts.init(dom);

这里值得一提的就是.js文件的引用顺序,因为echarts的初始化依赖于echarts.min.js等文件,所以我们自己的.js文件需要在最后引用(引用顺序可能是个很基础的东西,但新手容易踩坑,比如我)

EChats的玩法很多,不仅仅散点图,包括K线图热力图雷达图等等,这里不再赘述,送上网站链接:

Apache ECharts (incubating)​echarts.apache.org
159ea26479276495dcef07fdd9502117.png

.js文件仓库链接:

echarts CDN by jsDelivr​cdn.jsdelivr.net