Echarts Legend 图标改变

最近有需求,看了一下Echarts的关系网络图可以实现,但是图出来后发现图例的图标显示的都一样,看了文档后,觉得不符合我的要求,就改了下代码,最终的chart如下(每一类一种图标):

改动如下:

legend.js 里面_buildItem方法里

itemType = data[i].icon || this._getSomethingByName(itemName).type;

这是获取图例的图标类型的,可以看下

/**
 * 根据名称返回series数据或data
 */
_getSomethingByName: function (name) {
    var series = this.option.series;
    var data;
    for (var i = 0, l = series.length; i < l; i++) {
        if (series[i].name === name) {
            // 系列名称优先
            return {
                type: series[i].type,
                series: series[i],
                seriesIndex: i,
                data: null,
                dataIndex: -1
            };
        }

        if (
            series[i].type === ecConfig.CHART_TYPE_PIE 
            || series[i].type === ecConfig.CHART_TYPE_RADAR
            || series[i].type === ecConfig.CHART_TYPE_CHORD
            || series[i].type === ecConfig.CHART_TYPE_FORCE
            || series[i].type === ecConfig.CHART_TYPE_FUNNEL
            || series[i].type === ecConfig.CHART_TYPE_TREEMAP
        ) {
            data = series[i].categories || series[i].data || series[i].nodes;

            for (var j = 0, k = data.length; j < k; j++) {
                if (data[j].name === name) {
                    return {
                        type: series[i].type,
                        series: series[i],
                        seriesIndex: i,
                        data: data[j],
                        dataIndex: j
                    };
                }
            }
        }
    }
    return {
        type: ‘bar‘,
        series: null,
        seriesIndex: -1,
        data: null,
        dataIndex: -1
    };
},

可以看出,获取图标type,先从series里面获取(首先series的type在上面这几个类型中),获取不到默认就是bar,但是force只有一个series,所以图例所有图标都是force类型的。

看到这,就知道怎么改了,我自己定义了一个方法(_genLegendTypeByName)从category里面获取,每个category是个对象,里面定义name和type属性(我在后台封装好了),改动之后代码如下:

itemType = data[i].icon || this._getLegendTypeByName(itemName).type;
if(!itemType || itemType == ‘‘) {
    itemType = data[i].icon || this._getSomethingByName(itemName).type;
}

这样如果category里面没有定义话,还使用_getSomethingByName方法获取,不会出错,获取到type之后,还有个问题

// 图形
itemShape = this._getItemShapeByType(
    lastX, lastY,
    itemWidth, itemHeight,
    (this._selectedMap[itemName] && this._hasDataMap[itemName] ? color : ‘#ccc‘),
    itemType,
    color
);

这里获根据之前获得的type封装shape对象

_getItemShapeByType: function (x, y, width, height, color, itemType, defaultColor) {
    var highlightColor = color === ‘#ccc‘ ? defaultColor : color;
    var itemShape = {
        zlevel: this.getZlevelBase(),
        z: this.getZBase(),
        style: {
            iconType: ‘legendicon‘ + itemType ,
            x: x,
            y: y,
            width: width,
            height: height,
            color: color,
            strokeColor: color,
            lineWidth: 2
        },
        highlightStyle: {
            color: highlightColor,
            strokeColor: highlightColor,
            lineWidth: 1
        },
        hoverable: this.legendOption.selectedMode,
        clickable: this.legendOption.selectedMode
    };

上面这个方法图标的类型已经变成了‘legendicon‘+type,最终生成图标的方法在icon.js里面

/**
         * 创建矩形路径
         * @param {Context2D} ctx Canvas 2D上下文
         * @param {Object} style 样式
         */
        buildPath : function (ctx, style, refreshNextFrame) {
            if (this.iconLibrary[style.iconType]) {
                this.iconLibrary[style.iconType].call(this, ctx, style, refreshNextFrame);
            }
            else {
                ctx.moveTo(style.x, style.y);
                ctx.lineTo(style.x + style.width, style.y);
                ctx.lineTo(style.x + style.width, style.y + style.height);
                ctx.lineTo(style.x, style.y + style.height);
                ctx.lineTo(style.x, style.y);
                ctx.closePath();
            }
            return;
        },

但是这里iconLibrary内容如下:

看到没有,legendicon开头的就那么几种,所以你要想用triangle这些,就把_getItemShapeByType里面iconType改下就可以了

时间: 2024-11-07 11:33:42

Echarts Legend 图标改变的相关文章

qt学习(三):鼠标图标改变

qt学习 (三):鼠标图标改变 当你进入一个美好的qt软件场景,比如游戏,电脑的黑白图标会让程序逊色不少, 1改图标要加光标的头文件, 2 载入光标图, 3 再设置改光标就可以了 1在头文件中加 #include <QtGui>  //光标类的父类 //再在public成员中声明换的函数void keyPressEvent(QKeyEvent *k); //声明按键换图的函数         .h文件    --注意头文件和声明 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

echarts使图标能自适应浏览器窗口变化,及经纬度转换

1.echarts使图标能自适应浏览器窗口变化 window.onresize = function () { myChart.resize(); //使第一个图表适应 myChart_pieMain.resize(); // 使第二个图表适应 } 2.map地图中经纬度与平面坐标转换 var arr = [117,36.4]; alert(myChart.chart.map.getPosByGeo("china",arr));  //map经纬度转成平面坐标 版权声明:本文为博主原创

小技巧——优盘图标改变和背景改变

参考链接:http://jingyan.baidu.com/article/63acb44afeac2661fcc17e8d.html 相信很多用户已经看惯了u盘的背景与图标,但是有时看久了也会觉得单调,虽说已习以为常,同时也希望能改变一下,希望能给u盘换个背景,今天u启动小编就来手把手的教教大家,一起来学习一下吧! 在进行背景图片设置之前,我们需要一张自己喜欢的照片,然后把图片处理成大小为1024x768.格式为.jpg的图片,将处理好的图片拷贝到u盘中. 在u盘内新建记事本后,在记事本中输入

highcharts图表的图例legend怎么改变显示位置

一.将图例Legend放于图表右侧1.设置chart的marginRight属性值:chart: { marginRight: 120}2.设置legend图例属性值如下 legend: { align: 'right', //水平方向位置 verticalAlign: 'top', //垂直方向位置 x: 0, //距离x轴的距离 y: 100 //距离Y轴的距离} 3.效果图: 二.将图例放于图表左上角1.设置legend的属性legend: { align: 'left', //水平方向位

echarts legend文字配置多个颜色(转)

困扰很久的问题终于解决了 oh yea! echarts legend文字配置多个颜色legend: {data: [{name:‘直接访问’,icon : ‘circle’,textStyle: {color: ‘red’}},{name:‘邮件营销’,icon : ‘rect’,textStyle: {color: ‘blue’}},{name:‘联盟广告’,textStyle: {color: ‘#ffbb32’}}]--------------------- 作者:雪抛 来源:CSDN

小程序echarts数据不改变,或者是一次渲染成功,第二次进入,渲染失败的解决办法

1.引入echarts插件: import * as echarts from '../../ec-canvas/echarts'; 2.data中定义: ecBar: { onInit: initChart }, 3.app.js中定义全局变量: globalData: { userInfo: null, all_date: [] }, 4.onload中,定义一个  all_date ,用来接收数据 5.循环出来的数据,赋值:app.globalData.all_date = all_dat

echarts legend 重叠 (转载)

解决方案:  1. 调整option中的grid.top值才能避免重叠:(可以设置定制,也可以定义了一个计算公式) 2. 文档注明[特殊字符串 ''(空字符串)或者 '\n' (换行字符串)用于图例的换行.] 转载来源:http://blog.csdn.net/doleria/article/details/52503763 内容如下: github地址:Data Visualization ----------------------------------------------------

Echarts - legend属性设置

legend: { orient: 'horizontal', // 'vertical' x: 'right', // 'center' | 'left' | {number}, y: 'top', // 'center' | 'bottom' | {number} backgroundColor: '#fff', borderColor: 'rgba(178,34,34,0.8)', borderWidth: 4, padding: 10, // [5, 10, 15, 20] itemGa

Android TabHost 动态修改图标或者动态改变标题

那时客户需要实现在TabHost标题上动态显示从数据库获取的个数.起初这样思考的,从数据库 获取个数是非常简单,但是要把获取的个数显示在TabHost标题,思前想后,想用Handler来异步实现消息传递. 如果将图标或者标题的变量设置为全局变量,你们应该知道我的目的吧.也就是为了在这个类不断的进行赋值. 先来简单的认识下TabHost吧. xml的文件代码: <?xml version="1.0" encoding="utf-8"?> <TabHo