SVG可视化简易漏斗图

简介: Visualization as a problem-solving and knowledge discovery tool has become even more important as we enter the Big Data era.

Visualization as a problem-solving and knowledge discovery tool has become even more important as we enter the Big Data era.

效果图

result

js代码

jQuery

/*------------------------------------------
    说明:漏斗图 - TEST
    作者:taolinran
    日期:2016-12
---------------------------------------------*/

/* global app: true */

(function(root){
  var app = (function() {
      var funnelDefaultColor = [
            '#e15025',
            '#f18922',
            '#f7a83a',
            '#45bf7b',
            '#5f86d1',
            '#4774ca',
            '#3d5f9f'
        ];

      return {
        /*-------------------------------------------
          Func: 生成漏斗图
          params: [{}]
          memo: 还需要加一个是否支持SVG的判断
        ---------------------------------------------*/
        genFunelChart: function(data, height, w1, w2, funelColors) {

            var defaultColor = '#eee',
                defaultData = [
                    {percent: 0.143},
                    {percent: 0.143},
                    {percent: 0.143},
                    {percent: 0.143},
                    {percent: 0.143},
                    {percent: 0.143},
                    {percent: 0.143}
                ],
                funelOpacity = 0.2;

            height = (typeof height !== 'undefined') ? height : 280;
            w1 = (typeof w1 !== 'undefined') ? w1 : 300;
            w2 = (typeof w2 !== 'undefined') ? w2 : 60;

            funelColors = (typeof funelColors !== 'undefined') ? funelColors : funnelDefaultColor;

            var allWidth = w1;

            var funelSvg = ['<svg id="funel_svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="' + allWidth + '" height="' + height + '" viewBox="0 0 ' + allWidth + ' ' + height + '">'];

            if (data[0]) {

                /* 边界处理之 全部为0 */
                $.each(data, function(i, item){
                    if (item.percent > 0) {
                        funelOpacity = 1;
                    }
                });

                if (funelOpacity !== 1) {
                    data = defaultData;
                }

                var p0 = 0;
                $.each(data, function(i, item){
                    /* 正常漏斗组成 */
                    var p1 = item.percent,
                        r0 = parseFloat((((w1 - w2) * p0) / 2).toFixed(3)),
                        r1 = parseFloat((((w1 - w2) * p1) / 2).toFixed(3)),

                        x1 = r0,
                        y1 = parseFloat((height * p0).toFixed(3)),

                        x2 = r0 + r1,
                        y2 = parseFloat((height * (p0 + p1)).toFixed(3)),

                        x3 = w1 - r0 - r1,
                        y3 = y2,

                        x4 = w1 - r0,
                        y4 = y1;


                    var colorNow = funelColors[i] || defaultColor,
                        normalPath = '<path d="M' + x1 + ' ' + y1 + ' L' + x2 + ' ' + y2 + ' L' + x3 + ' ' + y3 + ' L' + x4 + ' ' + y4 + ' Z"' +
                                    ' fill="' + colorNow + '" stroke="none" style="opacity: ' + funelOpacity + '"></path>';
                        funelSvg.push(normalPath);

                    p0 += p1;
                });
            }

            funelSvg.push('</svg>');

            return funelSvg.join('');

        },

        /*-------------------------------------------
          Func: 漏斗图svg
        ---------------------------------------------*/
        drawFunnelBySvg: function(elementId, data) {

            /* 参数暂时略 */
            var svgHtml = app.genFunelChart(data);

            $(elementId).html(svgHtml);
        },

      };
  })();

  root.app = app;

})(window);

$(document).ready(function() {
  var demoData = [
    {percent: 0.1},
    {percent: 0.3},
    {percent: 0.1},
    {percent: 0.25},
    {percent: 0.15},
    {percent: 0.05},
    {percent: 0.05}
  ];

  app.drawFunnelBySvg('#svg_panel', demoData);
});

草图

sketch

区块图(微调)

区块图

目录
相关文章
|
5天前
|
数据可视化
实现绘制Sankey桑基图(河流图、分流图)流程数据可视化
实现绘制Sankey桑基图(河流图、分流图)流程数据可视化
|
3月前
|
数据可视化
Echarts5.3.2可视化案例-时间轴动态柱形图
Echarts5.3.2可视化案例-时间轴动态柱形图
|
4月前
|
数据可视化
Tableau可视化设计案例-03基本表、树形图、气泡图、词云
Tableau可视化设计案例-03基本表、树形图、气泡图、词云
|
4月前
|
数据可视化 定位技术 数据格式
Tableau可视化设计案例-07 多边形地图和背景图地图
Tableau可视化设计案例-07 多边形地图和背景图地图
|
4月前
|
数据可视化
Tableau可视化设计案例-04标靶图、甘特图、瀑布图
Tableau可视化设计案例-04标靶图、甘特图、瀑布图
|
4月前
eCharts实现漏斗图
eCharts实现漏斗图
66 0
eCharts实现漏斗图
|
9月前
|
Web App开发 数据可视化 JavaScript
漏刻有时数据可视化Echarts组件开发(23):世界地图动态时间轴的散点气泡图
漏刻有时数据可视化Echarts组件开发(23):世界地图动态时间轴的散点气泡图
122 0
|
9月前
|
数据可视化 定位技术 数据格式
漏刻有时数据可视化Echarts组件开发(18):渐变透明柱状图和地图map结合的案例
漏刻有时数据可视化Echarts组件开发(18):渐变透明柱状图和地图map结合的案例
95 0
|
9月前
|
前端开发
Echarts实战案例代码(49):基于不支持立体漏斗图Funnel的HTML+CSS解决方案
Echarts实战案例代码(49):基于不支持立体漏斗图Funnel的HTML+CSS解决方案
103 0
|
9月前
|
数据可视化
数据可视化Echarts学习(2):柱图任务进度完成比例图属性练习柱图堆叠
数据可视化Echarts学习(2):柱图任务进度完成比例图属性练习柱图堆叠
58 0