使用g2堆叠柱形图点击柱状图展示对应月份的数据

import { Chart, registerTheme } from '@antv/g2';
import moment from 'moment';
import store from '@/_store';
import { getTabletData } from '@/api';

export default (id: string, data: any, key?: string) => {
  const chart = new Chart({
    container: id,
    autoFit: true,
    height: 700,
  });
  chart.data(data);

  chart.axis('dateTime', {
    tickLine: null,
    label: {
      formatter: (val) => {
        return `${val.split('-')[1]}月`;
      },
    },
  });

  chart.axis('value', {});
  chart.legend({
    position: 'top-right',
    marker: {
      symbol: 'circle',
    },
  });

  chart.tooltip(false);
  let color = ['#B3B6BE', '#3E7EFF'];
  if (key === 'feeding') color = ['#3E7EFF'];
  chart
    .interval()
    .adjust('stack')
    .position('dateTime*value')
    .color('name', color)
    .state({
      selected: {
        style: {
          stroke: '#000',
        },
      },
    });

  chart.removeInteraction('legend-filter'); // 自定义图例,移除默认的分类图例筛选交互
  chart.on('interval:click', async (ev: any) => {
    const a = chart.getGeometries()[0].getElements().reverse();
    // chart.getElements().forEach((item) => {
    //   item.setState('selected', false);
    // });

    const data = ev.data;
    if (data) {
      const tim = data.mappingData._origin.dateTime;
      const startTime = moment(tim).startOf('month').valueOf();
      const endTime = moment(tim).endOf('month').valueOf();
      chart.getElements().forEach((item) => {
        if (item.getData().dateTime !== tim) {
          item.setState('selected', false);
        }
        if (item.getData().dateTime === tim) item.setState('selected', true);
      });
      const resDay = await getTabletData({
        statisticsType: 'day', //day天 ,month月
        sort: 'desc',
        startTime,
        endTime,
        pageNum: '1',
        pageSize: '1000',
      });
      store.commit('setDetailTable', resDay.data.list);
      const resMonth = await getTabletData({
        statisticsType: 'month', //day天 ,month月
        sort: 'desc',
        startTime,
        endTime,
        pageNum: '1',
        pageSize: '1000',
      });
      store.commit('setDetailList', resMonth.data.list);
    }
  });

  registerTheme('newTheme', { minColumnWidth: 10, maxColumnWidth: 15 });
  chart.theme('newTheme');
  chart.interaction('active-region');
  // chart.interaction('element-highlight-by-x');
  chart.interaction('element-selected');
  chart.render();
  const a = chart.getGeometries()[0].getElements().reverse();
  a[0].setState('selected', true);// 默认选中最后一项
  const b = chart.getElements().find((item) => {
    return (
      item.getData().value !== a[0].getData().value &&
      item.getData().dateTime === a[0].getData().dateTime
    );
  });
  b?.setState('selected', true);// 点击时堆叠图一整条都黑色
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值