zoukankan      html  css  js  c++  java
  • AntV G2 图表tooltip重命名

    在做数据可视化的过程中,遇到了一个问题,就是给图表tooltip重命名。

    在研究后,发现了三种方法:

    方法1:一般情况下,可以在给chart绑定数据源时,添加scale配置,并在scale配置中设置别名,直接在官网的实例代码中进行修改演示:

    代码如下:

    const data = [
      { year: '1991', value: 3 },
      { year: '1992', value: 4 },
      { year: '1993', value: 3.5 },
      { year: '1994', value: 5 },
      { year: '1995', value: 4.9 },
      { year: '1996', value: 6 },
      { year: '1997', value: 7 },
      { year: '1998', value: 9 },
      { year: '1999', value: 13 }
    ];
    const chart = new G2.Chart({
      container: 'container',
      forceFit: true,
      height: 500
    });
    chart.source(data);
    chart.scale('value', {
      alias:'值',    //为value字段设置别名,在tooltip显示时则显示别名
      min: 0
    });
    chart.scale('year', {
      range: [ 0, 1 ]
    });
    chart.tooltip({
      crosshairs: {
        type: 'line'
      }
    });
    chart.line().position('year*value');
    chart.point().position('year*value')
      .size(4)
      .shape('circle')
      .style({
        stroke: '#fff',
        lineWidth: 1
      });
    chart.render();
    

      

    图像如下:

    方法2:在geom中添加tooltip属性,返回处理后的结果,并且在chart的tooltip中自定义模板

    const data = [
      { year: '1991', value: 3 },
      { year: '1992', value: 4 },
      { year: '1993', value: 3.5 },
      { year: '1994', value: 5 },
      { year: '1995', value: 4.9 },
      { year: '1996', value: 6 },
      { year: '1997', value: 7 },
      { year: '1998', value: 9 },
      { year: '1999', value: 13 }
    ];
    const chart = new G2.Chart({
      container: 'container',
      forceFit: true,
      height: 500
    });
    chart.source(data);
    chart.scale('value', {
      min: 0
    });
    chart.scale('year', {
      range: [ 0, 1 ]
    });
    chart.tooltip({
      crosshairs: {
        type: 'line'
      },
        showTitle: false,
        itemTpl: '<li><span>年份: {year}</span><br><span>产量: {yield}</span></li>'
    });
    chart.line().position('year*value').tooltip('year*value',function(year,value){
      /**
      *此处也可以添加数据处理语句
      */
      return {
        year:year+'年',
        yield:value+'亿吨',
      }
    });
    chart.point().position('year*value')
      .size(4)
      .shape('circle')
      .style({
        stroke: '#fff',
        lineWidth: 1
      }).tooltip('year*value',function(year,value){
      /**
      *此处也可以添加数据处理语句
      */
      return {
        year:year+'年',
        yield:value+'亿吨',
      }
    });
    chart.render();
    

     

    图像如下:

    方法3:若数据源经过了transform的fold转换,有些情况下前两种方法可能就不会适用了,因为在数据转换前,格式是{ year: '1996', north: 322, south: 162 },

    在经过fold转换后,格式为{"year": "1996","type": "north","value": 322},{"year": "1996","type": "south","value": 162}

    此时已经无法为north和south设置别名了,这时我们可以在fold转换前在进行一次rename转换。

    const { DataView } = DataSet;
    const data = [
      { year: '1996', north: 322, south: 162 },
      { year: '1997', north: 324, south: 90 },
      { year: '1998', north: 329, south: 50 },
      { year: '1999', north: 342, south: 77 },
      { year: '2000', north: 348, south: 35 },
      { year: '2001', north: 334, south: -45 },
      { year: '2002', north: 325, south: -88 },
      { year: '2003', north: 316, south: -120 },
      { year: '2004', north: 318, south: -156 },
      { year: '2005', north: 330, south: -123 },
      { year: '2006', north: 355, south: -88 },
      { year: '2007', north: 366, south: -66 },
      { year: '2008', north: 337, south: -45 },
      { year: '2009', north: 352, south: -29 },
      { year: '2010', north: 377, south: -45 },
      { year: '2011', north: 383, south: -88 },
      { year: '2012', north: 344, south: -132 },
      { year: '2013', north: 366, south: -146 },
      { year: '2014', north: 389, south: -169 },
      { year: '2015', north: 334, south: -184 }
    ];
    // 数据需要加工成 {year: '1996', type: 'north', value: 50} 的模式
    const dv = new DataView().source(data);
    dv.transform({
      type:'rename',
      map:{
        north:'北方',
      	south:'南方',
      }
    })
    dv.transform({
      type: 'fold',
      fields: [ '北方', '南方' ], // 展开字段集
      key: 'type',                  // key字段
      value: 'value'               // value字段
    });
    
    const chart = new G2.Chart({
      container: 'container',
      forceFit: true,
      height: 500
    });
    chart.source(dv, {
      year: {
        range: [ 0, 1 ]
      }
    });
    chart.tooltip({
      crosshairs: {
        type: 'line'
      }
    });
    chart.area().position('year*value').color('type');
    chart.line().position('year*value').color('type')
      .size(2);
    chart.render();

    图像如下:

    目前发现了这三种方法,若有其他更好的方法,请留言,共同学习

  • 相关阅读:
    iptables一个包过滤防火墙实例
    www的iptables实例
    iptables单个规则实例
    iptables [-j target/jump] 常用的处理动作
    iptables [match] 常用封包匹配参数
    iptables command 常用命令列表
    iptables [-t table] 指定规则表
    iptablesIP规则的保存与恢复
    iptables在我们的网络机房实现NAT共享上网
    iptables典型NAT上网
  • 原文地址:https://www.cnblogs.com/MrZhaoyx/p/12036326.html
Copyright © 2011-2022 走看看