bizcharts的痛苦之旅(一)

4,576 阅读4分钟

众所周知:现在最火热的图表库就是G2以及echarts,而bizcharts是基于G2的一个react封装之后的库,使用起来比原生要方便些,但是文档分类比较简略,所以希望在官方文档的基础上把常用的整理出来。。。

一、charts组件--图表的最外层容器

Q1:谁决定了图表的大小?

  • height ( 为组件设置高度,但是这个高度不等于最外层的div的高度,padding:auto时有如下公式: 最外层div的高度~=height+5 )
  • padding ( 为图表设置外边距,建议设置为auto,这样才会撑满整个盒子 )
  • forceFit  ( 自适应宽度,高度不确定 )

参考配置示例 : codepen.io/Juias/pen/Z…

Q2: 数据源的格式?

  • data属性( key:value键值对,影响着横轴纵轴的显示,如果数据源与想要显示的格式不同建议在坐标轴对应的回调中修改 )
Q3: canvas图的起点与Y轴有一段距离咋整?如下图:


  • scale : 这是官方文档中的参数介绍,用的比较多的是这几个,其中要让图靠边就需要设置 range:[0,1]

    type: 'identity' | 'linear' | 'cat' | 'time' | 'timeCat' | 'log' | 'pow', // 指定数据类型
    alias: string, // 数据字段的别名,会影响到轴的标题内容
    formatter: () => {}, // 格式化文本内容,会影响到轴的label格式
    range: array, // 输出数据的范围,默认[0, 1],格式为 [min, max],min 和 max 均为 0 至 1 范围的数据。


二、Axis坐标轴组件

  • name对应数据中的key值

  • line:设置坐标轴线样式,具体样式设置参考官方文档:
//可配置样式
{
  stroke: 'dddddd',  //描边,一般用这个就可以了
  fill: '#ffffff',
  lineDash: [2, 2, 3],
  lineWidth: 3   //线宽
}
  • label:设置坐标轴文字样式

textStyle: {
    textAlign: 'center', // 文本对齐方向,可取值为: start center end
    fill: '#404040', // 文本的颜色
    fontSize: '12', // 文本大小
    fontWeight: 'bold', // 文本粗细
    textBaseline: 'top' // 文本基准线,可取 top middle bottom,默认为middle
  } | (text) => {
    // text: 坐标轴对应字段的数值
  }
}


三、Gemo--几何标记和图表类型

  • type:决定图表类型,更多详情见官网demo:bizcharts.net/products/bi…
  • color: 几何标记的颜色设置 ( String | Array 语法:['field', callback)] )

<Geom color={['price', '#ff0000-#00ff00']}/> //简单写法
color="l (90) 0:rgba(26,92,209,0.8) 1:rgba(56,149,234,0)" //复杂写法
// l表示线性渐变,(0)是从左至右,(90)是从上至下,后面的0和1表示渐变的位置 

  • tooltip: 主要设置tooltip数据显示格式,而ToolTip组件主要设置样式以及HTML

//如果不需要tooltip,直接设置为false
//如果需要的话就要设置相应的key值<Geom tooltip={
  ['sales*city', 
    (sales, city)=>
    {return {    name:'xxx',    value:city + ':' + sales}}
  ]
}

  • active:鼠标 hover 时的效果 Boolean | Array

<Geomactive={[true, {highlight: false,// true 是否开启 highlight 效果,开启时没有激活的变灰  
style: {  fill: 'red'} // 选中后 shape 的样式
}]}/>


四:Tooltip--提示信息组件

Q1:提示信息组件默认有小圆点,如果只有一个字段不想要怎么办?

  • itemTpl--直接修改html结构,

itemTpl =  "<li data-index={index}>"
 +  '<span style="background-color:{color};width:8px;height:8px;border-radius:50%;'
 + 'display:inline-block;margin-right:8px;"></span>'
 +  "{name}: {value}" +  "</li>";

Q2:想要修改title以及容器样式?

  • g2-tooltip--设置容器样式
  • g2-tooltip-title--设置标题样式
  • .....
  • containerTpl--设置容器模板( 设置同上 )

五:dataset设置切换动画

  • 初始化以及载入数据:

class C extends Component{
    // 注意这个初始化只执行一次,所以不能全部写到render里面
    dv = new DataSet().createView();
    render(){
        this.dv.source(data);
    }
}

六:案例分析

从官方示例折线图开始:


1.重复的tooltip产生

这是因为tooltip是根据gemo的country字段产生的,现在有两个gemo标签所以生成了两对tooltip,此时定位到Gemo组建上,只需要取消一个tooltip就可以了,

tooltip={false}

2.轴线和图表距离太近了,轴线文字颜色要调整,或者轴线文字太长了,可能需要hover显示全称

首先定位到Axis组件上,对号入座:

以上这些问题都用label属性去解决
//     Y轴的设置
    const YLabelConfig = {
      offset:20, //与轴线的距离
      textStyle: {
      fill: '#ccc', // 文本的颜色
      fontSize: '12', // 文本大小
      fontWeight: 'bold', // 文本粗细
  }
 //     X轴设置
    const XLabelConfig={
      offset:20, //与轴线的距离
      textStyle: {
      fill: '#ccc', // 文本的颜色
      fontSize: '12', // 文本大小
      fontWeight: 'bold', // 文本粗细
  },
      /**
         * 使用 html 渲染文本
         * @param  {string} text  文本值
         * @param  {object} item  该文本值对应的原始数据记录
         * @param  {number} index 索引值
         * @return {string}       返回 html 字符串
         */
      htmlTemplate(text, item, index){
          return `<span title="${text}" style="color:#ccc;
font-weight:bold;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:no-wrap;">${text}</span>`
      }
    }

3.tooltip前面有空白,这里定位ToolTip组件

// 这里去掉了{name}前面的span标签
const itemTpl= '<li data-index={index}>' + '{name}: {value}' + '</li>'
// 这里需要注意:只能使用字符串,而且格式比较固定,name,value也都是固定的,
如果要改内容的话需要在Gemo标签上增加函数:
tooltip={['sales*city', (sales, city)=>{
    return {
      name:'xxx',
      value:city + ':' + sales
    }
}]}

线上演示地址:codepen.io/Juias/pen/R…