SVG可视化简易漏斗图

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

效果图

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);
});

草图

区块图(微调)

时间: 2024-09-20 00:18:14

SVG可视化简易漏斗图的相关文章

Excel教程 如何制作漏斗图

  比方说出产一个商品从开端出产到结尾的上市经过环环筛选之后所定下来的上市数量,接下来,我们拿一组实例来讲解一下吧! 漏斗图是通过条形图结合辅助列制作出来的,具体操作步骤可以分为以下几步: 1.创建占位辅助列; 2.插入堆积条形图; 3.将占位填充为无颜色. 操作步骤 1.首先启动Excel表格,简单制作一个5行3列的表格,包含环节.数量和占位一些内容,在C3单元格输入公式,由于漏斗图看起来是按居中方式分布的,所以这里先用第一个环节(B2)的数量减去下一个环节的数量,算出差别是多少,然后在除以2

Excel如何制作漏斗图

  比方说出产一个商品从开端出产到结尾的上市经过环环筛选之后所定下来的上市数量,接下来,我们拿一组实例来讲解一下吧! 漏斗图是通过条形图结合辅助列制作出来的,具体操作步骤可以分为以下几步: 1.创建占位辅助列; 2.插入堆积条形图; 3.将占位填充为无颜色. 操作步骤 1.首先启动Excel表格,简单制作一个5行3列的表格,包含环节.数量和占位一些内容,在C3单元格输入公式,由于漏斗图看起来是按居中方式分布的,所以这里先用第一个环节(B2)的数量减去下一个环节的数量,算出差别是多少,然后在除以2

js-jquery如何实现漏斗图

问题描述 jquery如何实现漏斗图 jquery如何实现漏斗图 求源代码和注释,谢谢了 解决方案 亲,你做好了吗?求源代码和注释,谢谢

jquery ECharts某楼盘销售客户漏斗图

漏斗图适用于业务流程比较规范.周期长.环节多的流程分析,通过漏斗各环节业务数据的比较,能够直观地发现和说明问题所在.在电商网站分析中,通常用于转化率比较,它能展示用户从进入网站到实现购买的最终转化率.在CRM中,客户销售漏斗图用来展示各阶段客户转化比较. 本文结合实例演示使用Echarts建立某楼盘的销售客户漏斗图,通过漏斗图表直观展示各个阶段的转换率.对于销售过程产生四个阶段的客户类型,如潜在客户--意向客户--谈判阶段--签约.这四个阶段的数据会成一个漏斗形.再简单的描述就是,有100个客户

Android自定义View简易折线图控件(二)

继续练习自定义View,这次带来的是简易折线图,支持坐标点点击监听,效果如下: 画坐标轴.画刻度.画点.连线..x.y轴的数据范围是写死的 1 <= x <= 7 ,1 <= y <= 70 ..写活的话涉及到坐标轴刻度的动态计算.坐标点的坐标修改,想想就头大,这里只练习自定义View. 1.在res/values文件夹下新建attrs.xml文件,编写自定义属性: <?xml version="1.0" encoding="utf-8"

数据可视化和信息图成功的要素

如果仅仅是能够将数据转化成漂亮的图表,或者是设计出20种不同式样的图表来解释你的观点,并不说明你应该利用所有这20种图表,甚至是其中一种. 如果要成功报告结果,将你所分析的度量和数据有效地转化为有商业价值的见解,使其能够为基于事实所做的决策提供支持,那么以下有几点指导方针: 1.确定你的目标受众. 无论你是否在做一份传统的报表还是新式的信息图,首先问问自己有哪些人将看到这份报告?他们对将要讨论的事项了解多少?他们需要什么?他们又想要知道什么?还有,他们会如何利用你要展示的信息呢? 2.定制数据可

[可视化]一张图看懂Python3

原文发布时间为:2016-03-04

[信息可视化]一张图了解马航客机失联事件核心进展

    原文发布时间为:2014-03-18 本文来自合作伙伴"大数据文摘",了解相关信息可以关注"BigDataDigest"微信公众号

21款超实用的酷炫「数据可视化工具」

  辛辛苦苦分析一堆大数据,竟然没人看!到底怎么办?俗话说,有图有真相,一图胜千言,取悦了眼球,剩下的都好说.如果你正着手于从数据中洞察出有用信息,那你所需要的正是--数据可视化.本文挖掘了21款炙手可热的数据可视化工具,干净利落的高颜值信息图,就要这样做! 译者微信公众号:特赞Design,欢迎关注唷. FusionCharts FusionCharts Suite XT不仅可以为带给你漂亮的图表,还能帮你制作出生动的动画.巧妙的设计和丰富的交互性.它在PC端.Mac.iPad.iPhone和