分享好友 前端技术首页 频道列表

G2( bizCharts ) React 绘制混合图例

react  2023-03-08 22:300

 

G2( bizCharts ) React 绘制混合图例,

// data-set 可以按需引入,除此之外不要引入别的包
import React from 'react';
import { Chart, Axis, Tooltip, Geom, Legend, Label } from 'bizcharts';
import DataSet from '@antv/data-set';

// 下面的代码会被作为 cdn script 注入 注释勿删
// CDN START
const data = [
  { label: '0.1', 放款应还本金: 2800, 价格: 2800, 收益: 2260, 总收益率: 2 },
  { label: '0.2', 放款应还本金: 1800, 价格: 1800, 收益: 1300, 总收益率: 3 },
  { label: '0.3', 放款应还本金: 950, 价格: 950, 收益: 900, 总收益率: 5 },
  { label: '0.4', 放款应还本金: 500, 价格: 500, 收益: -390, 总收益率: 1 },
  { label: '0.5', 放款应还本金: 170, 价格: 170, 收益: 100, 总收益率: 3 },
  { label: '0.6', 放款应还本金: 170, 价格: 170, 收益: 100, 总收益率: 3 },
  { label: '0.7', 放款应还本金: 170, 价格: 170, 收益: -100, 总收益率: 3 },
  { label: '0.8', 放款应还本金: 170, 价格: 170, 收益: 100, 总收益率: 3 },
  { label: '0.9', 放款应还本金: 170, 价格: 170, 收益: 100, 总收益率: 3 },
  { label: '1.0', 放款应还本金: 170, 价格: 170, 收益: 100, 总收益率: 3 },
  { label: '未评分', 放款应还本金: 170, 价格: 170, 收益: 100, 总收益率: 3 },
];
const ds = new DataSet();
const dv = ds.createView().source(data);
dv.transform({
  type: 'fold',
  fields: ['放款应还本金', '价格', '收益'], // 展开字段集
  key: 'type', // key字段
  value: 'value', // value字段
});
const scale = {
  总收益率: {
    type: 'linear',
    min: 0,
    max: 10,
  },
};

let chartIns = null;

const getG2Instance = chart => {
  chartIns = chart;
};
console.log(getG2Instance, 'getG2Instance');
class Demo extends React.Component {
  render() {
    return (
      <Chart
        height={400}
        width={500}
        forceFit
        data={dv}
        scale={scale}
        padding="auto"
        onGetG2Instance={getG2Instance}
      >
        <Legend
          custom
          allowAllCanceled
          items={[
            {
              value: '放款应还本金',
              marker: { symbol: 'square', fill: '#3182bd', radius: 5 },
            },
            {
              value: '价格',
              marker: { symbol: 'square', fill: '#41a2fc', radius: 5 },
            },
            {
              value: '收益',
              marker: { symbol: 'square', fill: '#54ca76', radius: 5 },
            },
            {
              value: '总收益率',
              marker: {
                symbol: 'hyphen',
                stroke: '#fad248',
                radius: 5,
                lineWidth: 3,
              },
            },
          ]}
          onClick={ev => {
            const item = ev.item;
            const value = item.value;
            const checked = ev.checked;
            const geoms = chartIns.getAllGeoms();
            console.log('geoms', geoms);
            for (let i = 0; i < geoms.length; i++) {
              const geom = geoms[i];
              if (geom.getYScale().field === value && value === '总收益率') {
                if (checked) {
                  geom.show();
                } else {
                  geom.hide();
                }
              } else if (
                geom.getYScale().field === 'value' &&
                value !== '总收益率'
              ) {
                geom.getShapes().map(shape => {
                  if (shape._cfg.origin._origin.type == value) {
                    shape._cfg.visible = !shape._cfg.visible;
                  }
                  shape.get('canvas').draw();
                  return shape;
                });
              }

              const g_shapes = geom.get('labelContainer');
              let labels = g_shapes._cfg.labelsGroup._cfg.children;
              labels.map(label => {
                if (checked) {
                  if (label._id.includes(value)) {
                    label._cfg.visible = true;
                  }
                } else {
                  if (label._id.includes(value)) {
                    label._cfg.visible = false;
                  }
                }
              });
            }
          }}
        />
        <Axis name="label" />
        <Axis name="value" position={'left'} />
        <Tooltip />
        <Geom
          type="interval"
          position="label*value"
          color={[
            'type',
            value => {
              if (value === '放款应还本金') {
                return '#2b6cbb';
              }
              if (value === '价格') {
                return '#41a2fc';
              }
              if (value === '收益') {
                return '#54ca76';
              }
            },
          ]}
          adjust={[
            {
              type: 'dodge',
              marginRatio: 1 / 32,
            },
          ]}
        >
          <Label content="value" />
        </Geom>
        <Geom type="line" position="label*总收益率" color="#fad248" size={3}>
          <Label content="label" />
        </Geom>
      </Chart>
    );
  }
}

// CDN END
ReactDOM.render(<Demo />, mountNode);

G2( bizCharts ) React 绘制混合图例

 

查看更多关于【react】的文章

展开全文
相关推荐
反对 0
举报 0
评论 0
图文资讯
热门推荐
优选好物
更多热点专题
更多推荐文章
react编译器jsxTransformer,babel
1.JSX是什么JSX其实是JavaScript的扩展,React为了代码的可读性更方便地创建虚拟DOM等原因,加入了一些类似XML的语法的扩展。2.编译器——jsxTransformerJSX代码并不能直接运行,需要将它编译成正常的JavaScript表达式才能运行,jsxTransformer.js就是这一编

0评论2023-03-08892

react-native start 启动错误解决方法
ERRORError watching file for changes: EMFILE{"code":"EMFILE","errno":"EMFILE","syscall":"Error watching file for changes:","filename":null}Error: Error watching file for changes: EMFILE

0评论2023-03-08542

React兄弟组件通信(发布者-订阅者模式)
// eventProxy.js'use strict';const eventProxy = {onObj: {},oneObj: {},on: function(key, fn) {if(this.onObj[key] === undefined) {this.onObj[key] = [];}this.onObj[key].push(fn);},one: function(key, fn) {if(this.oneObj[key] === undefined) {thi

0评论2023-03-08558

React笔记_(7)_react路由 react路由配置
路由路由(routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程。路由器当然是作为一个转发设备出现的,主要是转发数据包来实现网络互联。那么react的路由到底指的是什么呢?举个栗子~~~在网页中点击后,从A页面跳到B页面,跳转过程中url发生变

0评论2023-03-08542

react-native关闭所有黄色警告 react native statusbar
 将以下这两句话加在index.js(入口文件)中,放在AppRegistry.registerComponent('App', () = App)之前即可1 console.ignoredYellowBox = ['Warning: BackAndroid is deprecated. Please use BackHandler instead.','source.uri should not be an empty str

0评论2023-03-08979

react中style的写法 react styles
div style={{width: 20px; height=30px}}style的写法/div 

0评论2023-03-08630

写react vue要规范,结尾的冒号,之间的逗号一定要写规范,写全
写react  vue要规范,结尾的冒号,之间的逗号一定要写规范,写全

0评论2023-03-08869

react 中引入font-awesome
1.https://www.npmjs.com/package/react-fontawesomenpm install --save react-fontawesome   //这里不包含样式,需要引入font-awesome的样式 2.npm install font-awesome//为了用他的样式3.import React, { Component } from 'react';import './index.les

0评论2023-03-08532

【React】react开发vscode插件推荐  
原文地址:https://github.com/xieqingtian/blog/issues/2由于本人主要是做react开发,用的代码编辑器是传说中的宇宙第一前端神器vscode, 所以在这里记录并推荐一些本人开发过程中常用的一些vscode插件帮助开发。1. 代码提示类插件1.1 Reactjs code snippets

0评论2023-03-08684

React16.8的新特性及旧特性 react 新特性
首先简单谈谈react和vue的区别:如果你写过vue,会发现组件的视图指令已编译为修改视图的函数存放在绑定的state里的属性里,所以能够做到靶向修改,而react会以组件为根,重新渲染整个组件子树。所以应避免这些不必要的render。0、setState和shouldComponentU

0评论2023-03-08486

【踩坑】【React】 antd 动态表单获取和设置值
真是个悲伤的故事,由于动态表单里面嵌套动态表单,然后就不知道怎么获取和设置值了,然后公司的小朋友教我了QAQ动态表单为totalStrategy:{strategy:{mainArea:123,mainPublicArea:456,},strategy:{mainArea:123,mainPublicArea:456,}}获取 form.getFieldVal

0评论2023-03-08551

【转】React、Vue访问NotFound
部署完成后,访问没问题,从页面中点击跳转也没问题,但是只要点击刷新或通过浏览器地址栏回车,就会出现404现象!在本地开发中是没有这个问题的,调试的时候一切都是正常的直接访问地址,便会出现404http://www.xxx.com/home/application/list问题原因:刷新

0评论2023-03-08538

图书《React.js实战》代码下载
图书《React.js实战》代码下载链接:https://pan.baidu.com/s/1kep0xsTeSupyr15c3VwmBw 提取码:9pra这个代码经过图书《React.js实战》作者的授权发布,请放心用于学习。禁止本下载代码用于任何形式的商用目的。

0评论2023-03-08318

移动端悬浮框可移动,可回弹,Vue and React
一,首先讲 React的悬浮框示例,可参照链接Demo文档,可参照链接 1. 安装npm install suspend-button -S2. 使用import React, { Component } from 'react'import ReactDOM from 'react-dom'import SuspendButton from 'suspend-button'class App extends Com

0评论2023-03-08650

Taro 里 使用 react hooks 如何实现 类似小程序 onShow的功能
useDidShow(() = {  console.log("进入页面")})

0评论2023-03-08661

更多推荐