小程序使用AntV F2自定义图表和legend交互

注意:横坐标显示的名称为lx, data里的lx与findLegendItem方法中的lx保持一致

var data = [{
    lx: 'Jon Nicoll',
    score: 282,
    avgScore: 94
  }, {
    lx: 'Aaron Maxwell',
    score: 208,
    avgScore: 41.6
  }, {
    lx: 'Warren Clunes',
    score: 186,
    avgScore: 46.5
  }, {
    lx: 'David Bolton',
    score: 184,
    avgScore: 30.67
  }, {
    lx: 'Joel Robindon',
    score: 177,
    avgScore: 44.25
  }, {
    lx: 'Kyle Buckley',
    score: 150,
    avgScore: 50
  }, {
    lx: 'Jordan Lawrence',
    score: 148,
    avgScore: 24.67
  }, {
    lx: 'Jack Carey',
    score: 138,
    avgScore: 34.5
  }, {
    lx: 'Kuldeep Pegu',
    score: 130,
    avgScore: 32.5
  }, {
    lx: 'Max Hillier',
    score: 128,
    avgScore: 32
  }, {
    lx: 'Angus Le Lievre',
    score: 127,
    avgScore: 62.5
  }];

  var legendItems = [{
    name: '个人分数',
    marker: 'square',
    fill: '#FACC14',
    checked: true
  }, {
    name: '平均分数',
    fill: '#000',
    checked: true
}];

  function findLegendItem(lx) {
    var index = void 0;
    for (var i = 0; i < legendItems.length; i++) {
      if (legendItems[i].name === lx) {
        index = i;
        break;
      }
    }
    return index;
  }

 chart = new F2.Chart({
    el: canvas,
    width,
    height,
    options:{
      legend:true
    }
  });

  chart.source(data, {
    score: {
      alias: '个人分数'
    },
    avgScore: {
      alias: '平均分数'
    }
  });
  chart.axis('avgScore', {
    grid: null
  });
  chart.axis('lx', {
    label: {
      rotate: Math.PI / 3,
      textAlign: 'start',
      textBaseline: 'middle'
    }
  });

  // 自定义图例内容以及交互行为
  chart.legend({
    custom: true,
    items: legendItems,
    onClick: function onClick(ev) {
      var item = ev.clickedItem;
      var name = item.get('name');
      var checked = item.get('checked');
      var children = item.get('children');
      if (checked) {
        var markerFill = children[0].attr('fill');
        var textFill = children[1].attr('fill');
        children[0].set('_originColor', markerFill); // 缓存 marker 原来的颜色
        children[1].set('_originColor', textFill); // 缓存文本原来的颜色
      }
      var geoms = chart.get('geoms');
      for (var i = 0; i < geoms.length; i++) {
        var geom = geoms[i];

        if (geom.getYScale().alias === name)
          if (!checked) {
            geom.show();
            children[0].attr('fill', children[0].get('_originColor'));
            children[1].attr('fill', children[1].get('_originColor'));
          } else {
            geom.hide();
            children[0].attr('fill', '#bfbfbf'); // marker 置灰
            children[1].attr('fill', '#bfbfbf'); // 文本置灰 置灰
          }
        item.set('checked', !checked);
        legendItems[findLegendItem(name)].checked = !checked;
      }
    }
  });

  chart.interval().position('lx*score').color('#FACC14');
  chart.line().position('lx*avgScore').color('#000');
  chart.point().position('lx*avgScore').size(3).style({
    fill: '#000',
    stroke: '#fff',
    lineWidth: 1
  });
  chart.render();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值