Apache Superset集成Echarts

一、环境准备

1.1 软件环境

  • npm,nodejs

二、主要步骤

2.1、添加漏斗图模型

 cd venv/lib/python2.7/site-packages/superset
 vi viz.py
  • 在class TableViz(BaseViz):上方加入以下代码:
 class EchartsFunnelViz(BaseViz):
     """ Funnel Chart"""
     viz_type = 'echarts_funnel'
     is_timeseries = False
     def get_data(self, df):
         df = df.pivot_table(
         index=self.groupby)
         df = df.reset_index()
         df.columns = ['name', 'value']
         return df.to_dict(orient='records')

2.2、新建echarts主要文件

 cd venv/lib/python2.7/site-packages/superset/static/assets/src/visualizations
 touch echarts_funnel.js
  • 将以下代码粘贴到里面
 import echarts from 'echarts';
 function echartsFunnelVis(slice, payload) {
 const div = d3.select(slice.selector);
 const slice_id = "echarts_slice_"+slice.formData.slice_id;
 var html = '<div id='+slice_id+' style="width: '+slice.width() +'' +
  'px;height:'+slice.height()+'px;"></div>';
 div.html(html);
 const fd = slice.formData;
 const json = payload.data;
 var data_name = [];
 const data = json;
 data.forEach(function (item, index, array) {
 data_name.push(item['name']);
 });
 var myChart =echarts.init(document.getElementById(slice_id));
 var option = {
tooltip: {
    trigger: 'item',
    formatter: "{a} <br/>{b} : {c}"
},
legend: {data: data_name},
calculable: true,
series: [
     {
        name:'漏斗图',
        type:'funnel',
        left: '10%',
        top: 60,
        //x2: 80,
        bottom: 60,
        width: '80%',
        // height: {totalHeight} - y - y2,
        min: 0,
        max: 100,
        minSize: '0%',
        maxSize: '100%',
        sort: 'descending',
        gap: 2,
        label: {
            normal: {
                show: true,
                position: 'inside'
            },
            emphasis: {
                textStyle: {
                    fontSize: 20
                }
            }
        },
        labelLine: {
            normal: {
                length: 10,
                lineStyle: {
                    width: 1,
                    type: 'solid'
                }
            }
        },
        itemStyle: {
            normal: {
                borderColor: '#fff',
                borderWidth: 1
            }
        },
        data: data
    }
]
 };
 myChart.setOption(option);
 }
 module.exports = echartsFunnelVis;

2.3、在index.js中添加viz.py中的类型和echarts_funnel.js的对应关系

 cd venv/lib/python2.7/site-packages/superset/static/assets/src/visualizations
 vi index.js
  • 在export const VIZ_TYPES 代码块的最后面加入echarts_funnel: ‘echarts_funnel’,

  • 加入后如下图所示:
    在这里插入图片描述
    在const vizMap 代码块的最后面加入[VIZ_TYPES.echarts_funnel]: require(‘./echarts_funnel.js’),

  • 加入后如下图所示:
    在这里插入图片描述

2.4、添加一种可视化类型

 cd venv/lib/python2.7/site-packages/superset/static/assets/src/explore
 vi visTypes.js
  • 在export const visTypes代码块里面加入以下代码
 echarts_funnel: {
    label: t('Funnel View'),
    showOnExplore: true,
    controlPanelSections: [
      {
        label: t('Query'),
        expanded: true,
        controlSetRows: [
          ['metrics'],
          ['adhoc_filters'],
          ['groupby'],
          ['limit'],
        ],
      },
      {
        label: t('Chart Options'),
        controlSetRows: [
          ['color_scheme'],
        ],
      },
    ],
 },

2.5、添加漏斗图图片

  • 自己先在echarts官网上截一张漏斗图的图片,命名为echarts_funnel.png
  • 如下图所示:
    在这里插入图片描述
 cd venv/lib/python2.7/site-packages/superset/static/assets/images/viz_thumbnails
  • 将echarts_funnel.png图片放到这个路径下

2.6、用npm搭建echarts环境

 cd venv/lib/python2.7/site-packages/superset/static/assets
 npm install --save echarts@3.8.5(版本尽量要保持一致)

2.7、重新编译supersets源码

 cd venv/lib/python2.7/site-packages/superset/static/assets
 npm run dev
  • 如果报错就先执行js_build.sh脚本再执行npm run dev
  • 编译成功的标志,如下图所示:
    在这里插入图片描述

2.8、用mysql中的测试数据展现漏斗图

  • 在mysql中新建一张test_funnel的表,

  • 字段设计如下图所示:
    在这里插入图片描述

  • 测试数据如下图所示:
    在这里插入图片描述

  • 打开superset主界面的sqllab页面,输入select * from test_funnel查询语句查询表中的数据,然后生成图表

  • 如下图所示:
    在这里插入图片描述

  • 点击Visualize生成以下界面
    在这里插入图片描述

  • 点击Visualize转到以下界面
    在这里插入图片描述

  • 至此superset集成echarts成功

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值