Echarts改变Y轴坐标的数据

本文介绍了一种使用ECharts进行交通流数据可视化的方案,包括车流量和人流量的实时展示。通过自定义的tranNumber函数,实现了数值的合理转换,如万和亿单位的自动切换,提升了数据的可读性。同时,详细配置了图表的各个部分,如图例、工具箱、x轴和y轴等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

option

option = {
        tooltip: {
            trigger: 'axis'
        },
        legend: {
            data:['车流量','人流量']
        },
        toolbox: {
            show: true,

        },
        xAxis:  {
            type: 'category',
            boundaryGap: false,
            data: ["08:00","09:00","10:00","11:00","12:00","13:00","14:00","15:00","16:00","17:00","18:00","19:00","20:00"]
        },
        yAxis: {
            type: 'value',
            axisLabel: {
                 formatter: function(v){
                     return  tranNumber(v);
                 }
            }
        },
        series: [
            {
                name:'车流量',
                type:'line',
                data:[0,0,10000,3000,30000,30000,30000,30000,30000,30000,30000,30000,30000],
               
            },
            {
                name:'人流量',
                type:'line',
                data:[153,4000,4000,15000,4000,4000,4000,4000,4000,4000,4000,4000],
                
            }
        ]
    
};

主要:

yAxis: {
            type: 'value',
            axisLabel: {
                 formatter: function(v){
                     return  tranNumber(v);
                 }
            }
        }

tranNumber()方法

function tranNumber(num){
    var numStr = num.toString();
    // 十万以内直接返回
    if (numStr.length <5 ) {
        return numStr;
    }
    //大于8位数是亿
    else if (numStr.length > 8) {
        var decimal = numStr.substring(numStr.length - 8, numStr.length - 8 );
        return parseFloat(parseInt(num / 100000000) + '.' + decimal) + '亿';
    }
    //大于6位数是十万 (以10W分割 10W以下全部显示)
    else if (numStr.length > 5) {
        var decimal = numStr.substring(numStr.length - 4, numStr.length - 4)
        return parseFloat(parseInt(num / 10000) + '.' + decimal) + '万';
    }else if(numStr.length == 5){
        var decimal = numStr.substring(numStr.length - 3, numStr.length - 4)
        return parseFloat(parseInt(num / 10000) + '.' + decimal) + '万';
 
        
    }
   
};

图例

ECharts 中修改折线图的纵坐标(Y )原始值,主要涉及以下几个方面:调整 Y 的范围、自定义刻度值以及格式化显示内容。以下是具体实现方法: --- ### 1. 设置 Y 的最小值和最大值 通过 `yAxis.min` 和 `yAxis.max` 属性可以直接指定 Y 的取值范围[^3]。 ```javascript yAxis: { type: 'value', min: 0, // 设置最小值 max: 10000 // 设置最大值 } ``` 如果需要动态计算这些值,可以使用回调函数来获取数据中的极值并加以扩展[^3]。 ```javascript yAxis: { type: 'value', min: function (value) { return value.min - 10; }, // 动态设置最小值 max: function (value) { return value.max + 10; } // 动态设置最大值 } ``` --- ### 2. 自定义 Y 刻度值 通过 `yAxis.interval` 属性可以控制 Y 的刻度间隔。例如,每 500 单位显示一个刻度[^3]。 ```javascript yAxis: { type: 'value', interval: 500 // 刻度间隔为 500 } ``` 此外,还可以通过 `yAxis.data` 或者 `axisTick` 配置项来自定义具体的刻度位置和样式[^4]。 --- ### 3. 格式化 Y 标签 当 Y 的数值较大或者具有特殊单位时,可以通过 `axisLabel.formatter` 对其进行格式化处理[^2]。 ```javascript yAxis: { type: 'value', axisLabel: { formatter: '{value}万' // 将数值以“万”为单位显示 } } ``` 对于超长数字的情况,也可以采用科学计数法或其他简化方式[^2]。 ```javascript yAxis: { type: 'value', axisLabel: { formatter: function (value) { return value.toExponential(2); // 科学计数法保留两位小数 } } } ``` --- ### 4. 替换 Y 原始值为其他描述性文本 有时为了让图表更具可读性,可能需要用文字代替纯数字作为 Y 的刻度值。此时可以借助 `data` 字段重新定义 Y 的内容。 ```javascript yAxis: { type: 'category', // 类目模式 data: ['低', '中', '高'] // 自定义类目名称替代原有数值 }, series: [{ data: [[0, 1], [1, 2], [2, 3]], // 数据需匹配新的类别索引 type: 'line' }] ``` --- ### 5. 结合 SVG 修改底层 DOM 元素 如果上述方法无法完全满足需求,还可以深入到 ECharts 渲染后的 SVG 图层,直接操作 `.y-axis .tick text` 等节点来进行个性化改造。 示例代码如下: ```javascript chart.on('finished', () => { const svgWidth = 800; const margin = { left: 50, right: 50 }; chart.selectAll('.y-axis .tick line') .filter((d, i) => i > 0) .attr('x2', svgWidth - margin.left - margin.right) .attr('stroke', '#aaa') .attr('stroke-width', 0.4); }); ``` 此技术适用于高度定制化的场景,但维护成本较高,应谨慎选用。 --- ### 总结 综上所述,ECharts 提供了灵活多样的机制用于调整折线图的 Y 表现形式,无论是简单的数值映射还是复杂的视觉增强均可轻松达成目标。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值