ECharts实现折线图颜色分段及垂直X轴的markline标注

注:案列展示地址  https://gallery.echartsjs.com/editor.html?c=xBkYIDiWWl&v=1

一、预期效果
可以根据传递的参数的不同生成相应的折线图分段 


二、技术要点
1、需要根据传参分割原有折线图的数据,用于生成不同的series子元素,便于后面的折线图分段展现。 
2、折线图平行于y轴的markline实现并不友好,对于高度最高是在初次创建图标的时候就是写死的,因为目前没有找到任何方法可以获取ECharts图标自动生成的Y轴最大值。

三、代码展示
<html>
<body>
    <div class="row">
        <div class="container">
            <div class="col-lg-4 col-md-4">
                <button class="btn btn-default" οnclick="initCharts()">生成图像</button>
            </div>

            <div class="col-lg-8 col-md-8">
                <div id="main" style="height: 300px;">

                </div>
                <button id="adjust" class="btn btn-primary pull-right" οnclick="transCharts(['周三', '周五'])">调整</button>
            </div>
        </div>
    </div>
</body>
<link href="css/bootstrap.css" rel="stylesheet" type="text/css" media="all" />
<script type="text/javascript" src="echarts3/echarts.js"></script>
<script type="text/javascript" src="jquery-2.1.4.min.js"></script>
<script type="text/javascript">
    var myChart = echarts.init(document.getElementById('main'));

    function initCharts() {
        var option = {
            title: {
                text: '未来一周气温变化',
                subtext: '纯属虚构'
            },
            tooltip: {
                trigger: 'axis'
            },
            xAxis:  {
                type: 'category',
                boundaryGap: false,
                data: ['周一','周二','周三','周四','周五','周六','周日']
            },
            yAxis: {
                type: 'value',
                axisLabel: {
                    formatter: '{value} °C'
                },
                max: 15
            },
            series: [
                {
                    name:'最高气温',
                    type:'line',
                    data:[6, 8, 11, 10, 12, 13, 10]
                }
            ]
        };
        myChart.clear();
        myChart.setOption(option);
    }
    //根据传入的点进行数据分割, option填充和重新制图
    function transCharts(splitPoints) {
        var oldOption = myChart.getOption();
        var data = oldOption.series[0].data;
        var dataTime = oldOption.xAxis[0].data;
        var splitIndex = [];
        for (var i =0; i < splitPoints.length; i++) {
            splitIndex.push(dataTime.indexOf(splitPoints[i]));
        }
        console.log(splitIndex);

        var series = [];
        var index = 0;
        var seriesData = new Array(splitIndex.length+1);
        for (var i = 0; i < seriesData.length; i++) seriesData[i] = new Array();
        for (var i = 0; i < data.length; i++) {
            console.log(i + '-----------' + index);
            if (i < splitIndex[index]) {
                seriesData[index].push(data[i]);
                for (var j = index+1; j < seriesData.length; j++) {
                    seriesData[j].push('-');
                }
            }
            else if (i == splitIndex[index]) {
                seriesData[index].push(data[i]);
                seriesData[++index].push(data[i]);
                for (var j = index+1; j < seriesData.length; j++) {
                    seriesData[j].push('-');
                }
            }
            else {
                seriesData[index].push(data[i]);
            }
            for (var k = 0; k < seriesData.length; k++) {
                console.log(seriesData[k]);
            }
            console.log(i + '-----------');
        }

        for (var i = 0; i < seriesData.length; i++) {
            series.push({
                name: i+'',
                type: 'line',
                data: seriesData[i]
            });
        }
        var markLineData = [];
        for (var i = 0; i < splitPoints.length; i++) {
            markLineData.push([
                {coord:[splitPoints[i], 0]},
                {coord:[splitPoints[i], oldOption.yAxis[0].max]}
            ])
        }
        series.push({
            name:'平行于y轴的趋势线',
            type:'line',
            markLine: {
                name:'aa',
                data: markLineData
            }
        })


        var options = {
            title: oldOption.title,
            tooltip: oldOption.tooltip,
            xAxis:  oldOption.xAxis,
            yAxis: oldOption.yAxis,
            series: series
//            series: [
//                {
//                    name: '最高气温',
//                    type: 'line',
//                    data: [6, 8, 11]
//                },
//                {
//                    name: '最高气温1',
//                    type: 'line',
//                    data: ['-', '-', 11, 10, 12]
//                },
//                {
//                    name: '最高气温2',
//                    type: 'line',
//                    data: ['-','-', '-', '-', 12, 13, 10]
//                },
//                {
//                    name:'平行于y轴的趋势线',
//                    type:'line',
//                    //data:[0],
//                    markLine: {
//                        name:'aa',
//                        data: [[
//                            {coord:['周三',0]},
//                            {coord:['周三',15]}//如何获取grid上侧最大值,目前是写死的
//                        ],[
//                            {coord:['周五',0]},
//                            {coord:['周五',15]}//如何获取grid上侧最大值,目前是写死的
//                        ]]
//                    }
//                }
//            ]
        };
        myChart.clear();
        myChart.setOption(options);
    }
</script>
</html>

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用 echarts 的 itemStyle 属性,可以设置折线段的颜色。可以参考官网文档:https://echarts.apache.org/zh/option.html#series-line.itemStyle ### 回答2: 在Echarts折线图中,要实现折线分段显示不同的颜色,可以通过使用"series"中的"itemStyle"属性来实现。 首先,在数据项中,我们可以设置每个数据点的特定颜色,例如: ```javascript data: [ {value: 120, itemStyle: {color: 'red'}}, {value: 200, itemStyle: {color: 'blue'}}, {value: 150, itemStyle: {color: 'green'}} ] ``` 然后,在图表的配置项中,找到对应的series配置项,设置"itemStyle"属性为一个函数,这个函数将根据数据项中的颜色进行渲染: ```javascript series: [{ type: 'line', data: [ {value: 120, itemStyle: {color: 'red'}}, {value: 200, itemStyle: {color: 'blue'}}, {value: 150, itemStyle: {color: 'green'}} ], itemStyle: function (params) { return params.data.itemStyle; } }] ``` 这样配置后,折线图的每个数据点将根据其特定颜色进行渲染,从而实现了折线分段显示不同的颜色。 需要注意的是,以上示例是基于Echarts4的配置方式,如果是其他版本可能会有些许差异。另外,为了使折线图更加美观,也可以在"itemStyle"中配置其他样式,如设置线条粗细、线条样式等。希望以上回答对你有所帮助。 ### 回答3: 要实现echarts折线图折线分段显示不同的颜色,可以使用echarts的区域标记功能。 首先,需要设置折线图的x数据和y数据。然后,使用series配置项中的markArea属性来标记不同的区域。 例如,我们有以下数据: ```javascript // x数据 var xData = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']; // y数据 var yData = [120, 200, 150, 80, 70, 110, 130]; ``` 然后,在series配置项中设置markArea属性,来标记不同的区域: ```javascript series: [{ type: 'line', data: yData, markArea: { data: [{ yAxis: 0, // 区域起始位置 itemStyle: { color: 'rgba(255, 0, 0, 0.3)' // 区域颜色 } },{ yAxis: 100, // 区域终止位置 itemStyle: { color: 'rgba(0, 255, 0, 0.3)' // 区域颜色 } }] } }] ``` 以上代码中,我们设置了两个区域,一个从y0开始,另一个从y100开始。通过设置itemStyle中的color属性来指定不同区域的颜色。 最后,将x数据和series配置项应用到echarts实例中,即可实现折线图折线分段显示不同的颜色。 ```javascript var myChart = echarts.init(document.getElementById('chart')); myChart.setOption({ xAxis: { data: xData }, series: [{ type: 'line', data: yData, markArea: { data: [{ yAxis: 0, itemStyle: { color: 'rgba(255, 0, 0, 0.3)' } },{ yAxis: 100, itemStyle: { color: 'rgba(0, 255, 0, 0.3)' } }] } }] }); ``` 这样,echarts折线图的折线就会按照设定的区域进行分段显示,每个区域的颜色也会根据设置来呈现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值