UNPKG

@bizcharts/scaffold-cira-crowd

Version:

人群画像分析

81 lines (74 loc) 1.96 kB
import React, { Component } from 'react'; import { Chart, Geom, Tooltip, Coord, Shape } from 'bizcharts'; const { DataSet } = window; function getTextAttrs(cfg) { return Object.assign({}, { fillOpacity: cfg.opacity, fontSize: cfg.origin._origin.size, rotate: cfg.origin._origin.rotate, text: cfg.origin._origin.text, textAlign: 'center', fontFamily: cfg.origin._origin.font, fill: cfg.color, textBaseline: 'Alphabetic', }, cfg.style); } Shape.registerShape('point', 'cloud', { drawShape(cfg, container) { const attrs = getTextAttrs(cfg); return container.addShape('text', { attrs: Object.assign(attrs, { x: cfg.x, y: cfg.y, }), }); }, }); export default class star extends Component { render() { const { data } = this.props; const scale = { x: { nice: false }, y: { nice: false }, }; const dv = new DataSet.View().source(data); const range = dv.range('value'); const min = range[0]; const max = range[1]; dv.transform({ type: 'tag-cloud', fields: ['key', 'value'], size: [window.innerWidth, 400], font: 'Verdana', padding: 0, timeInterval: 5000, rotate() { let random = ~~(Math.random() * 4) % 4; // eslint-disable-line if (random === 2) { random = 0; } return random * 90; }, fontSize(d) { if (d.value) { return ((d.value - min) / (max - min)) * (80 - 24) + 24; } return 0; }, }); return ( <Chart data={dv} height={400} padding={50} scale={scale} forceFit onGetG2Instance={g2Chart => this.props.updateInstance && this.props.updateInstance(g2Chart)} > <Tooltip showTitle={false} /> <Coord reflect="y" /> <Geom type="point" position="x*y" color="key" shape="cloud" /> </Chart> ); } }