用echarts写的转换率图表(漏斗图 + 象形柱图)

作者 : 开心源码 本文共2824个字,预计阅读时间需要8分钟 发布时间: 2022-05-13 共241人阅读

平常用图表可能都是常规的折线图,柱状图,饼图这些基本的。
下面的是一个漏斗图 + 象形柱图写出来的图表。

完成后的图表

漏斗图很简单,只讲下象形柱图里的几个关键点(由于这里的用法有点特别,不是文档里的常规操作)。

  • 第一点:把图形换成图片
    symbol属性里,前面记得加 image: ,不然图片出不来。(文档看清楚一点再下手)

  • 第二点:上图可以看到,我们需要只有一列且纵向排列的图形
    假如用 symbolRepeat 中的 fixed 指定图形重复,那旁边的转化率数字就没法根据 data 写入了。
    要在 yAxis 中的 type 要改成 category,顺便写入 inverse : true(不然的话,图形从上到下对应的data是从末尾到开头的顺序),旁边的转换率即可以对应data里的值,通过 label 去做了。

  • 第三点:调整图形在x轴方向的位置。
    可以在 xAxis 中写入min : 0,max : 100,通过 data 里的 value 去调整图形在x轴上的相对位置(也可以不写入min 和 max,区别就是 data 中 value 的值控制图形 x 轴移动的距离大小),而后通过symbolOffset去微调。

  • 第四点:调整图形之间的间隔与顶部的距离
    由于不是 symbolRepeat 出来的重复图形,所以没法通过 symbolMargin 属性去调整。那么要如何调整呢?
    在yAxis中通过min 和 max 去调整图形之间的大概间隔。
    最后通过 symbolOffset 调整图形与顶部的距离。

最后直接上代码

    echarts.init(document.getElementById('photoConversion')).setOption({            title: {                text: `拍照全流程转化率`,                top: 26,                left: 33,                textStyle: {                    fontFamily: 'MicrosoftYaHei',                    color: '#252525',                    fontSize: 16,                    fontWeight: 400                }            },            color: ['#1481E2', '#1F88E5', '#3594E8', '#4CA0EA', '#62ABED', '#79B8EF', '#8FC3F2'],            xAxis: {                show: false,            },            yAxis: {                show: false,                type: 'category',                inverse: true,                min: 0,                max: 6,            },            series: [{                type: 'funnel',                minSize: 90,                maxSize: '70%',                left: '4%',                top: 100,                bottom: 50,                gap: 2,                label: {                    position: 'inside',                    fontFamily: 'Microsoft YaHei',                    fontSize: 16,                    color: '#fff',                    formatter: '{b}{xx|}\n{c}',                    rich: {                        xx: {                            padding: [6, 0]                        }                    }                },                data: [                    { value: 2033, name: '整页拍照' },                    { value: 2000, name: '收集错题' },                    { value: 1820, name: '确认提交' },                    { value: 1680, name: '错题本' },                    { value: 800, name: '打印错题' },                    { value: 500, name: '预览' },                    { value: 100, name: '下载文件' },                ]            }, {                type: 'funnel',                minSize: 80,                maxSize: 80,                top: 100,                bottom: 50,                left: '-68%',                gap: 2,                label: {                    position: 'insideLeft',                    fontFamily: 'Microsoft YaHei',                    fontSize: 14,                    color: '#545454',                    formatter: function (d) {                        console.log(d)                        if (d.data.name === '整页拍照') { return ' ' }                        var ins = `{s|${d.data.name}}\n` + `{x|${d.data.percent}}`;                        return ins                    },                    rich: {                        s: {                            fontSize: 14,                            color: '#545454',                            padding: [5, 0, 12, 0]                        },                        x: {                            fontSize: 16,                            color: '#545454',                            fontWeight: 'bold'                        }                    }                },                itemStyle: {                    color: 'transparent',                    borderWidth: 0,                },                data: [                    { value: 2030, name: '整页拍照', percent: '90%' },                    { value: 2000, name: '收集错题', percent: '70%' },                    { value: 1820, name: '确认提交', percent: '60%' },                    { value: 1680, name: '错题本', percent: '50%' },                    { value: 800, name: '打印错题', percent: '30%' },                    { value: 500, name: '预览', percent: '20%' },                    { value: 100, name: '下载文件', percent: '40%' },                ]            }, {                type: 'pictorialBar',                symbol: 'image://http://homework.mizholdings.com/kacha/kcsj/8351c72ed86c1a0c/.png',                symbolSize: ['45%', 58],                z: 1,                symbolOffset: ['110%', 60],                label: {                    show: true,                    position: 'right',                    offset: [15, 60],                    align: 'center',                    backgroundColor: 'rgba(249,249,249,1)',                    width: 106,                    height: 60,                    fontStyle: 'Microsoft YaHei',                    formatter: function (d) {                        var ins = '{s|转换率}\n' + `{x|${d.data.percent}}`;                        return ins                    },                    rich: {                        s: {                            fontSize: 14,                            color: '#545454',                            padding: [5, 0, 12, 0]                        },                        x: {                            fontSize: 16,                            color: '#121212'                        }                    }                },                data: [{                    value: 140,                    percent: '70%',                }, {                    value: 140,                    percent: '60%',                }, {                    value: 140,                    percent: '50%',                }, {                    value: 140,                    percent: '40%',                }, {                    value: 140,                    percent: '30%',                }, {                    value: 140,                    percent: '10%',                }]            }]        })

可以把 setOption 中的配置复制到 echarts 实例中,即可以看到图表了。但是由于容器的宽高有不同,所以会有点偏差,调整下浏览器的宽高即可以了。(浏览器宽高调整到1380*730差不多就是我图表放到的div宽高了)

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 用echarts写的转换率图表(漏斗图 + 象形柱图)

发表回复