搞了一天多,才勉强搞出了一个不紧凑的六边形统计图,是真的菜。

这里ECharts的用法与06说的同一种,直接使用带all的js

先上个效果图,用面积来表示人数的多少

1. 参数option的tooltip和title还是一样设置

2. 还有一个grid,这是用来设置y轴的实际长度的。(我把y轴隐藏了,所以设不设置没看出来什么)

3. xAxis和yAxis必须要有,即便是空也要有

4. 自定义多边形的关键在于series!

    

根据官方文档:在渲染阶段,对于series.data中的每个数据项(为方便描述,这里称为 dataItem),会调用此randerItem函数。这个renderItem函数的职责,就是返回一个(或者一组)图形元素定义图形元素定义中包括图形元素的类型、位置、尺寸、样式等。echarts会根据这些图形元素定义来渲染出图形元素。

所以,关键就在于randerItem这个函数上,既然是函数那么我就写一个

    

主要就是return的这个返回值上,我这里只写我用到的。其他具体见官方文档http://echarts.baidu.com/option.html#series-custom.renderItem.return

renderItem函数提供了两个参数:

  • params:包含了当前数据信息(如 seriesIndexdataIndex 等等)和坐标系的信息(如坐标系包围盒的位置和尺寸)。
  • api:是一些开发者可调用的方法集合(如 api.value()api.coord())。

type设置为'polygon'表示多边形

style可以通过api.style()设置itemStyle 的配置和视觉映射得到的颜色

shape就是用来设置多边形形状的,参数points传入的是多边形各个顶点的坐标列表。如[[344, 144], [388, 144], [421, 110], [388, 76], [344, 76], [311, 110]]

  这个形状自然是代表每个不同的数据,所以需要通过计算获得。

  这里我自己写了个算法,一个简单的算法花了我好长时间。。。最后再附上代码

注意:

1)图表中坐标系的原点是在左上角,x轴往右递增为正,y轴往下递增为正!!!不要被眼前的现象所欺骗!

2)我是根据官方demo修改的,这个demo还需要引用min.js并且使用到echarts.util.each。但是我没查到这个each是干什么用的,只是去掉后却不显示了,所以只好做些修改。有大神知道的麻烦教我一下,谢谢了

其实,有点遗憾,我的能力实在有限,写出来的算法不是紧凑的,只能分行显示,暂时无法也没时间做到插空显示。

如果能实现到和下图这个一样就更好了。这样就显得紧凑多了。

  

不过,有点地方还是可以修改一下的,那就是把文字显示在图形中,这时需要用到series.label属性(记得把data的value修改成列表[name, value],这样encode才用的对):

    

生成六边形各顶点的代码如下。一行显示4个。

var row_count = 4;//每行多少个

var sqrt_3 = Math.sqrt(3);//根号三

var last_x = 0;//上一个占长
var last_y = 0;//逐个筛选上一行占宽
var last_row_y = 0;//上一行占宽

var top_or_right = 0;//通过除以行显示个数代表向上增或者向右增

function GetPolygon(area) {
  //参数说明:area六边形面积,上一个六边形的标志点(向上增时是左上顶点的y坐标,向右增时是最右顶点的x坐标)
  let polygonP = [];//六边形六个顶点的列表,代表六边形
  let side = Math.sqrt(area / (3 * sqrt_3 / 2));//六边形边长
  let x = 75;//顶点x坐标 70左右才接近相当于x坐标原点 增大向右
  let y = 75;//顶点y坐标 240左右才接近相当于y坐标原点 减小向上
  if (last_row_y == 0) {
    last_row_y = y;
  }
  var distance = 10;//两个六边形间的距离
  let temp = top_or_right % row_count;
  top_or_right += 1;
  switch (temp) {
    case 0://每行的第一个
      x = x + side / 2;//六边形左上顶点x坐标
      y = last_row_y + distance;//六边形左上顶点y坐标
      last_x = x + side * 3 / 2;//因为下一个是向右增,故为最右顶点的x坐标
      last_y = y + side * sqrt_3;
      break;
    case 1://每行的第二个
    case 2://每行的第三个
      x = last_x + distance + side / 2;//六边形左上顶点x坐标
      y = last_row_y + distance;//六边形左上顶点y坐标
      last_x = x + side * 3 / 2;//因为下一个是向右增,故为最右顶点的x坐标
      last_y = y + side * sqrt_3 > last_y ? y + side * sqrt_3 : last_y;
      break;
    case 3://每行的最后个
      x = last_x + distance + side / 2;//六边形左上顶点x坐标
      y = last_row_y + distance;//六边形左上顶点y坐标
      last_row_y = y + side * sqrt_3 > last_y ? y + side * sqrt_3 : last_y;//因为下一个是向上增,故为左上顶点的y坐标
      break;
    }
  polygonP.push([x, y]);//添加左上顶点坐标
  for (var i = 0; i < 5; i++) {
    //剩下五个顶点
    switch (i) {
      case 0:
        x += side;
        break;
      case 1:
        x += side / 2;
        y += side * sqrt_3 / 2;
        break;
      case 2:
        x -= side / 2;
        y += side * sqrt_3 / 2;
        break;
      case 3:
        x -= side;
        break;
      case 4:
        x -= side / 2;
        y -= side * sqrt_3 / 2;
        break;
    }

  polygonP.push([x, y]);
  }

  return polygonP;
}

.net图表之ECharts随笔07-自定义系列(多边形)的更多相关文章

  1. .net图表之ECharts随笔09-pie环形图表

    这是最后的效果图 1. 这里title属性用到了富文本标签 官方文档是用的label属性,看得我一开始格外的懵逼.后面我尝试着在text中写入格式,没想到竟然成功了. rich中定义样式,在text中 ...

  2. .net图表之ECharts随笔06-这才是最简单的

    今天搞柱形图的时候,发现了一个更简单的用法.那就是直接使用带all的那个js文件 基本步骤: 1.为ECharts准备一个具备大小(宽高)的Dom 2.ECharts的js文件引入(echarts-a ...

  3. .net图表之ECharts随笔05-不同01的语法步骤

    找了好久,一直没找到可用的热力图heatmap.js. 应该说,使用01中的语法一直都无法实现热力图.只能说我太菜了... 现在急于求成,我找了另一种语法来调用ECharts.此种语法的js文件集是从 ...

  4. .net图表之ECharts随笔03-热力地图

    基于01和02 要得到如图所示的热力地图(我从NuGet上下载的包没有heatmap.js文件,没法直接搞热力图,只好暂时先搞着地图.后面尽量搞一下),一般要设置四个参数——title.tooltip ...

  5. .net图表之ECharts随笔01-最简单的使用步骤

    找了几种绘制图表的办法,后面选定了ECharts.下载链接如下,好像不同的ECharts有不同的用法,要下对. https://gitee.com/Tuky/SomeWebFrame/tree/mas ...

  6. .net图表之ECharts随笔08-bar柱状图

    之前一直都是跟着修改demo,感觉用得很吃力,现在结合上配置手册就好很多了,其实说到底就是参数的配置,所以配置手册尤为重要. 当然,这其中还是很多坑,希望可以找到对应的解决方案吧!!! 1. tool ...

  7. .net图表之ECharts随笔04-散点图

    见图说话,修改参数option实现上图显示: 1. 共用参数title还有一个属性subtext,可以用来设置副标题 2. tooltip与toolbox也是共用属性 3. dataZoom是设置滚动 ...

  8. .net图表之ECharts随笔02-字符云

    后续每一类图表,若无特殊说明,都将建立在01的基础上,修改参数option,且参数均以json的格式 要形成如图所示的字符云,一般需要设置两个大参数——title和series 其中,title就是图 ...

  9. vue可视化图表 基于Echarts封装好的v-charts简介

    **vue可视化图表 基于Echarts封装好的v-charts** 近期公司又一个新的需求,要做一个订单和销售额统计的项目,需要用到可视化图表来更直观的展示数据.首先我想到的是Echarts,众所周 ...

随机推荐

  1. GBDT-梯度提升树

    随机森林:bagging思想,可以并行,训练集权值相同 可以是分类树,回归树 输出结果(分类树):多数投票         (回归树):均值 减少方差 对异常数据不敏感 GBDT:拟合损失函数 boo ...

  2. UX设计秘诀之注册表单设计,细节决定成败

    以下内容由摹客团队翻译整理,仅供学习交流,摹客iDoc是支持智能标注和切图的产品协作设计神器. 说实话,现实生活中,又有多少人会真正喜欢填写表格?显然,并不多.因为填写表单这样的网页或App服务,并非 ...

  3. python 日志滚动 分文件

    import logging from logging.handlers import RotatingFileHandler import datetime import os def main() ...

  4. spring boot 启动自动跳到 断点 throw new SilentExitException

    项目 debug 启动,自动跳到 断点 ,而且就算F8 ,项目还是停止启动. 百度了一下,答案都是 Eclipse -> Preferences ->Java ->Debug去掉&q ...

  5. 人类及其他物种基因组DNA之问

    问题1 : 不同人类个体的基因组长度总长是不是一样,如果不一样,那么人类基因组长度排序和范围区间是如何控制的?最短是多少,最长是多少?如果一样,如何理解基因的插入与缺失,INDEL等现象,如何平衡的呢 ...

  6. Twitter 相关APP开发

    首先要获取 Consumer Key (API Key), Consumer Secret (API Secret):最好申请Access Token 和Access Token Secret,不然验 ...

  7. 前端之前端介绍或html的常用标签1

    一 web服务器的本质 由浏览器发送一个请求.服务器接收到,然后在回应一个响应. 由于浏览器的不同,web服务器响应的内容不一定被浏览器接收. HTTP/1.1 201 OK\r\n\r\n需要发送的 ...

  8. fiddler抓包时显示Tunnel to......443是怎么回事

    之前公司的app使用的http协议,因此不需要安装证书也能够转包. 后来改成https协议后,在使用fiddler进行抓包时,一直出现tunnel to 443. 百度了好久也没有具体的解决办法,后来 ...

  9. gj13 asyncio并发编程

    13.1 事件循环 asyncio 包含各种特定系统实现的模块化事件循环 传输和协议抽象 对TCP.UDP.SSL.子进程.延时调用以及其他的具体支持 模仿futures模块但适用于事件循环使用的Fu ...

  10. 【慕课网实战】Spark Streaming实时流处理项目实战笔记十二之铭文升级版

    铭文一级: ======Pull方式整合 Flume Agent的编写: flume_pull_streaming.conf simple-agent.sources = netcat-sources ...