echarts关系图name重复问题

     xydata = [[2, 4],
              [6, 7],
              [0, 1], 
              [1, 2],
              [2, 7], 
              [1, 4], 
              [4, 5],
              [5, 6],
              [3, 4 ]];
      dataArr =[
            { id:0,"name": "name1", "category": 0 },
            {id:1, "name": "name2", "category": 1 },
            {id:2, "name": "name3", "category": 1},
            {id:3, "name": "name1", "category": 1 },
            { id:4,"name": "name2", "category": 1},
            {id:5, "name": "name3", "category": 1 },
            {id:6, "name": "name4", "category": 1 }, 
            {id:7, "name": "name5", "category": 1}]
 
        dataArr = dataArr.map((value, index) => {
            value.showName = value.name;
            value.name = index;
            return value;
        })
 
 
        var links = xydata.map(function (item, i) {
                return {
                    source:xydata[i][0],
                    target: xydata[i][1],
                };
        });
  option = {
    tooltip: {
        show: false
    },
    legend: {
        x: "center",
        data: ["family", "suite"]
    },
    animation: false,
    series: [{
        categories: [{
            name: 'family',
            itemStyle: {
                normal: {
                    color: "#009800",
                }
            }
        }, {
            name: 'suite',
            itemStyle: {
                normal: {
                    color: "#4592FF",
                }
            }
        }],
        type: 'graph',
        layout: 'force',
        symbol: "circle",
        symbolSize: 50,
        roam: true, //禁止用鼠标滚轮缩小放大效果
        edgeSymbol: ['circle', 'arrow'],
        edgeSymbolSize: [0, 10],
        // 连接线上的文字
        focusNodeAdjacency: true, //划过只显示对应关系
        // 圆圈内的文字
        label: {
            normal: {
                show: true,
                formatter: function(params){
                    return params.data.showName
                }
            }
        },
        force: {
            repulsion: 5000
        },
        data: dataArr,
        links:links
        
    }]
  }

2. 第二种方法,给每个data数据中放一个id,效果跟上图一样(推荐)

    代码如下:

     
      xydata = [[2, 4],
            [6, 7],
            [0, 1], 
            [1, 2],
            [2, 7], 
            [1, 4], 
            [4, 5],
            [5, 6],
            [3, 4 ]];
      dataArr =[
            { id:0,"name": "name1", "category": 0 },
            {id:1, "name": "name2", "category": 1 },
            {id:2, "name": "name3", "category": 1},
            {id:3, "name": "name1", "category": 1 },
            { id:4,"name": "name2", "category": 1},
            {id:5, "name": "name3", "category": 1 },
            {id:6, "name": "name4", "category": 1 }, 
            {id:7, "name": "name5", "category": 1}]
 
      var links = xydata.map(function (item, i) {
                return {
                    source:xydata[i][0],
                    target: xydata[i][1],
                };
        });
  option = {
    tooltip: {
        show: false
    },
    legend: {
        x: "center",
        data: ["family", "suite"]
    },
    animation: false,
    series: [{
        categories: [{
            name: 'family',
            itemStyle: {
                normal: {
                    color: "#009800",
                }
            }
        }, {
            name: 'suite',
            itemStyle: {
                normal: {
                    color: "#4592FF",
                }
            }
        }],
        type: 'graph',
        layout: 'force',
        symbol: "circle",
        symbolSize: 50,
        roam: true, //禁止用鼠标滚轮缩小放大效果
        edgeSymbol: ['circle', 'arrow'],
        edgeSymbolSize: [0, 10],
        // 连接线上的文字
        focusNodeAdjacency: true, //划过只显示对应关系
        // 圆圈内的文字
        label: {
            normal: {
                show: true,
                formatter: function(params){
                    return params.data.name
                }
            }
        },
        force: {
            repulsion: 5000
        },
        data: dataArr,
        links:links
        
    }]
  }

 注:在关系图中,如果是force布局,这两种方式是没有问题的,如果是layout: 'none',自己定位置的话,这两种方法就不可以了,鼠标移上去的效果就没有了。

本文参考:https://blog.youkuaiyun.com/qq_34790644/article/details/107021175

<think>好的,我现在需要帮用户解决如何使用ECharts绘制高质量的科研折线图的问题。首先,我得回忆一下用户提到的引用内容,尤其是引用[1]、[2]、[3]、[4]中的相关信息。用户提供的引用中,引用[1]详细介绍了ECharts的功能,引用[2]给出了Python绘制折线图的示例,引用[3]提到Matplotlib的图表绘制方法,引用[4]有数据可视化的例子,而引用[5]可能和机器学习相关,但这里可能关系不大。 用户的需求是科研用途的折线图,所以重点在于如何让图表符合学术规范,比如清晰的标注、正确的数据展示、可重复的代码等。ECharts虽然强大,但默认样式可能需要调整才能满足科研出版的要求。我需要考虑以下几个方面: 1. **数据准备**:科研数据通常需要精确,可能需要从CSV或Excel导入,或者直接在代码中定义数组。引用[4]中的例子用了结构化的数据,这点可以参考。 2. **图表配置**:科研图表需要标题、轴标签、图例、网格线等元素,并且字体要足够大,线条要清晰。引用[3]提到的Matplotlib的坐标系和文本标签设置可以类比到ECharts的配置项里。 3. **样式优化**:颜色对比度要高,便于黑白打印时区分;线条类型(实线、虚线)和标记点样式要明确。引用[2]中的示例用不同颜色区分两种商品,但可能需要调整样式以符合学术标准。 4. **交互功能**:科研图表可能不需要太多交互,但导出高清图片的功能很重要,ECharts支持导出PNG,这点需要强调。 5. **代码结构**:提供完整、可运行的示例代码,用户可以直接复制修改。引用[4]中的代码结构比较清晰,可以作为参考,但需要转换为EChartsJavaScript语法。 接下来,我需要整合这些点,给出一个具体的步骤教程。可能还需要比较ECharts和其他库(如Matplotlib)在科研中的优缺点,但用户明确要求用ECharts,所以重点在ECharts的实现。 需要确保示例代码正确,配置项完整,比如设置xAxis和yAxis的type、name,调整line的symbol大小,添加grid配置以增加留白,设置toolbox的导出功能等。同时,要提醒用户注意字体大小、颜色对比,以及如何导出高清图片。 可能还需要提到如何添加误差线或置信区间,这在科研中常见,但ECharts是否支持?查一下文档,发现ECharts的系列配置中可以添加markArea或自定义系列,或者使用误差线插件,可能需要额外配置。不过如果用户没有特别提到,可能暂时不深入,但可以作为一个优化建议提到。 最后,生成相关问题,考虑用户可能进一步想知道如何优化、处理大数据或与其他工具比较,比如和Python的Matplotlib对比,或者如何导出特定格式的高清图。</think>以下是如何使用ECharts绘制科研级折线图的详细教程,结合学术规范与可视化最佳实践: --- ### 一、科研折线图核心要素 1. **数据精确性**:确保数据点坐标值准确无误,推荐使用$n \geq 3$次实验的均值,误差线建议用标准差表示[^4] 2. **可读性要求**:坐标轴标签字号建议$\geq 12pt$,线条宽度$\geq 2px$,颜色对比度需符合WCAG 2.0标准 3. **标注完整性**:必须包含$x/y$轴物理量及单位,使用LaTeX公式表达如$I/\mathrm{mA}$,图例应明确标注实验条件 --- ### 二、ECharts配置代码示例 ```html <!-- 容器 --> <div id="chart" style="width:800px; height:500px"></div> <script> // 初始化 var chart = echarts.init(document.getElementById('chart')); // 配置项 var option = { title: { text: '温度对反应速率的影响', left: 'center', textStyle: { fontSize: 16 } }, toolbox: { feature: { saveAsImage: { type: 'png', pixelRatio: 3 } // 导出高清图 } }, xAxis: { type: 'category', name: 'T/℃', nameLocation: 'center', nameGap: 30, data: [20, 30, 40, 50, 60] }, yAxis: { type: 'value', name: '反应速率v/(mol·L⁻¹·s⁻¹)', scale: true }, series: [{ type: 'line', symbolSize: 8, lineStyle: { width: 2 }, data: [0.12, 0.35, 0.68, 0.91, 1.20], markLine: { // 添加趋势线 data: [{ type: 'average' }] } }], grid: { // 控制留白 top: '15%', bottom: '20%', left: '15%' } }; // 渲染 chart.setOption(option); </script> ``` --- ### 三、关键优化技巧 1. **颜色方案**:使用`color: ['#2E86C1']`指定学术蓝,避免彩虹色系 2. **数据标记**:设置`symbol: 'circle'`明确数据点,`itemStyle: { borderWidth: 1 }`增强识别度 3. **字体配置**:通过全局`textStyle`设置`fontFamily: 'Arial'`保证跨平台一致性 4. **误差展示**:使用`custom series`绘制置信区间: ```javascript series: [{ type: 'custom', renderItem: function(params, api) { var points = []; for (var i = 0; i < data.length; i++) { points.push([api.coord([data[i].x, data[i].y + data[i].error])]); points.unshift([api.coord([data[i].x, data[i].y - data[i].error])]); } return { type: 'polygon', shape: { points: points } }; } }] ``` --- ### 四、学术规范建议 1. 导出时使用`pixelRatio: 3`生成300dpi以上分辨率图片 2. 添加数据来源说明`graphic: { elements: [{ type: 'text', right: 10, bottom: 10, style: { text: 'Data source: ...' } }] }` 3. 使用`dataset`规范数据格式,便于复用: ```javascript dataset: { source: [ ['Temp', 'Rate'], [20, 0.12], [30, 0.35], // ... ] } ``` ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值