superset集成echarts

本文档详细介绍了如何将ECharts集成到Superset中,以创建柱状折线图(mix-line-bar)。教程涵盖了从前端到后端的所有修改步骤,包括在`MainPreset.js`、`VizTypeControl.jsx`、`controlPanels`和`viz.py`等文件中的改动。此外,还解决了汉化和遇到的问题,如数据源列不能全为NULL、图表比例问题、图例和Y轴显示问题等。
摘要由CSDN通过智能技术生成

服务地址

服务可以登录 http://dnu8k5.natappfree.cc体验,账号:user,密码:user。
git 地址:https://github.com/Sherhang/incubator-superset/tree/zh/
在这里插入图片描述
在这里插入图片描述

前言

目前superset官方项目处于快速迭代中,版本的差异很大,目前发布的稳定版为0.36,所以改造主要基于0.36版本。另外,目前的master分支对元数据库结构已经做了改动,不能向前兼容。

目前superset的前端用d3和nvd3来做,很多图表不符合中国人的使用习惯,d3的部分图表性能很差,所以必须进行定制化。

集成echarts

echarts官方link

superset使用最新版本0.36,echarts4.7.0。主要参考link。这份教程给出的柱状折线图还不能达到实用的需求,比如格式调整,样式调整,字段分组等功能都没有做,后面我会把能实用的教程补齐。

集成echarts柱状折线图 mix-line-bar

这个柱状折线图完成的功能不全,仅仅帮助大家理解superset图表从后端到前端的渲染流程

流程

集成echarts柱状折线图 mix-line-bar
superset和echarts版本
前端目录 superset-frontend
首先0.36版本是比较新的版本,代码结构相比 0.30以前的改动还是比较大的,主要是前端的代码结构变化比较大, superset 把前端的插件单独放在一个superset-ui的项目中;superset中的前端代码主要放在superset-frontend的目录中

主要修改的地方

1、 superset-frontend/src/visualizations/ 目录下

1-1 新增文件夹MixLineBar,
主要新加的文件目录

1-2 新建文件夹 images 放入新增图表的图片
图片在echarts 上可以下载
https://www.echartsjs.com/examples/zh/index.html

选择你要接入的图表,然后右键另存为 就可以下载下来了
然后放在 images 文件下,可以转化为png

1-3 新增文件 MixLineBarChartPlugin.js

import {
    t } from '@superset-ui/translation';
import {
    ChartMetadata, ChartPlugin } from '@superset-ui/chart';
import transformProps from './transformProps';
import thumbnail from './images/thumbnail.png';


const metadata = new ChartMetadata({
   
  name: t('Mix Line Bar'),
  description: '',
  credits: ['https://www.echartsjs.com/examples/en/editor.html?c=mix-line-bar'],
  thumbnail,
});

export default class MixLineBarChartPlugin extends ChartPlugin {
   
  constructor() {
   
    super({
   
      metadata,
      transformProps,
      loadChart: () => import('./ReactMixLineBar.js'), // 前端渲染逻辑
    });
  }
}


1-4 新增文件 ReactMixLineBar.js 注册

import reactify from '@superset-ui/chart/esm/components/reactify';
import Component from './MixLineBar';

export default reactify(Component);

1-5 新增文件 transformProps.js 前端后端数据转换

export default function transformProps(chartProps) {
   

    const {
   width, height, queryData, formData} = chartProps;
    // formData 前端页面的数据
    // queryData  后端返回的数据
    return {
   
        data: queryData.data,
        width,
        height,
        formData,
        legend: queryData.data.legend,
        x_data: queryData.data.x_data,
        series: queryData.data.data,
    };

}

1-6 新增文件 MixLineBar.js 前端渲染图表主要逻辑

import echarts from 'echarts';
import d3 from 'd3';
import PropTypes from 'prop-types';
import {
    CategoricalColorNamespace } from '@superset-ui/color';

// 数据类型检查
const propTypes = {
   
    data: PropTypes.object,
    width: PropTypes.number,
    height: PropTypes.number,
};

function MixLineBar(element, props) {
   

    const {
   
        width,
        height,
        data,
        formData,
        x_data,
        series,
        legend,
    } = props; // transformProps.js 返回的数据

    const fd = formData
    // 配置y轴显示信息
    const left_y_min = fd.leftYMIn
    const left_y_max = fd.leftYMax
    const left_y_interval = fd.leftYInterval
    const right_y_min = fd.rightYMin
    const right_y_max = fd.rightYMax
    const right_y_interval = fd.rightYInterval
    // y轴别名
    const y_axis_label = fd.yAxisLabel
    const y_axis_2_label = fd.yAxis2Label

    // 右边y轴 对应的 指标列
    const right_y_column = fd.rightYColumn
    // 为了适配颜色
    const colorFn = CategoricalColorNamespace.getScale(fd.colorScheme);
    var colors = []
    if (colorFn && colorFn.colors) {
   
        colors = colorFn.colors
    }
    const colors_len = colors.length

    // y轴配置格式
    var yAxis_1 = {
   
        type: 'value',
        name: 'Left_Y_Axis',
        axisLabel: {
   
            formatter: '{value}'
        }
    }

    var yAxis_2 = {
   
        type: 'value',
        name: 'Right_Y_Axis',
        axisLabel: {
   
            formatter: '{value}'
        }
    }

    if (left_y_min !== undefined) {
   
        yAxis_1['min'] = left_y_min
    }
    if (left_y_max 
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值