ECharts时间轴与颜色

本文介绍了如何使用ECharts实现一条时间轴控制多个饼图的交互效果,详细解析了通过时间轴切换显示不同饼图数据的实现过程,并讲解了如何修改饼图区域颜色,提供了一段包含完整选项的示例代码。

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

最近在做两个网页,用到了ECharts和Highstock图表,确实比Chart.js更漂亮、更直观。
今天分享一下我用ECharts的一些心得。

1.用一条时间轴控制多个饼图

ECharts的官网给出的实例说到时间轴的基本上都是一条时间轴控制一个图表,例如下图
ECharts官网时间轴示例
但是有些时候我们可能需要用一个时间轴控制多个图,例如下图
时间轴控制多图表

其实大家多看看ECharts实例的代码,会发现做出这样一个效果并不难

首先直接用ECharts官网给出的标签式单文件引入饼图

<!DOCTYPE html>
<head>
    <meta charset="utf-8">
    <title>ECharts</title>
</head>
<body>
    <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="height:400px"></div>
    <!-- ECharts单文件引入 -->
    <script src="http://echarts.baidu.com/build/dist/echarts-all.js"></script>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts图表
        var myChart = echarts.init(document.getElementById('main')); 

        var option = {
            title : {
            text: '某站点用户访问来源',
            subtext: '纯属虚构',
            x:'center'
        },
            tooltip : {
                trigger: 'item',
                formatter: "{a} <br/>{b} : {c} ({d}%)"
            },
            legend: {
                orient : 'vertical',
                x : 'left',
                data:['直接访问','邮件营销','联盟广告','视频广告','搜索引擎']
            },
            calculable : true,
            series : [
                {
                    name:'访问来源',
                    type:'pie',
                    radius : '55%',
                    center: ['50%', '60%'],
                    data:[
                        {value:335, name:'直接访问'},
                        {value:310, name:'邮件营销'},
                        {value:234, name:'联盟广告'},
                        {value:135, name:'视频广告'},
                        {value:1548, name:'搜索引擎'}
                    ]
                }
            ]
        };

        // 为echarts对象加载数据 
        myChart.setOption(option); 
    </script>
</body>

接下来将所有的option内的代码封装到options内,并在option内加入timeline代码:

var option = {
            timeline: {
                data: [
                    '2013', '2014', '2015'
                ],//控制时间轴的节点数
                label: {
                    formatter: function(s) {
                        return s.slice(0, 4);
                    }
                },//控制时间轴节点的显示
                autoPlay: false//禁止自动播放
            },
            options:[{
                title : {
                text: '某站点用户访问来源',
                subtext: '纯属虚构',
                x:'center'
            },
            tooltip : {
                trigger: 'item',
                formatter: "{a} <br/>{b} : {c} ({d}%)"
            },
            legend: {
                orient : 'vertical',
                x : 'left',
                data:['直接访问','邮件营销','联盟广告','视频广告','搜索引擎']
            },
            calculable : true,
            series : [
                {
                    name:'访问来源',
                    type:'pie',
                    radius : '55%',
                    center: ['50%', '60%'],
                    data:[
                        {value:335, name:'直接访问'},
                        {value:310, name:'邮件营销'},
                        {value:234, name:'联盟广告'},
                        {value:135, name:'视频广告'},
                        {value:1548, name:'搜索引擎'}
                    ]
                }
            ]
            }]
        };

此时显示为一个饼图加时间轴,如果需要再加一个饼图,需要在series中再加入另外的饼图元素:

            series : [
                {
                    name:'访问来源',
                    type:'pie',
                    radius : '55%',
                    center: ['20%', '60%'],//饼图圆心的位置
                    data:[
                        {value:335, name:'直接访问'},
                        {value:310, name:'邮件营销'},
                        {value:234, name:'联盟广告'},
                        {value:135, name:'视频广告'},
                        {value:1548, name:'搜索引擎'}
                    ]
                },
                {
                    name:'访问来源',
                    type:'pie',
                    radius : '55%',
                    center: ['50%', '60%'],//饼图圆心的位置
                    data:[
                        {value:335, name:'直接访问'},
                        {value:310, name:'邮件营销'},
                        {value:234, name:'联盟广告'},
                        {value:135, name:'视频广告'},
                        {value:1548, name:'搜索引擎'}
                    ]
                },
                {
                    name:'访问来源',
                    type:'pie',
                    radius : '55%',
                    center: ['80%', '60%'],//饼图圆心的位置
                    data:[
                        {value:335, name:'直接访问'},
                        {value:310, name:'邮件营销'},
                        {value:234, name:'联盟广告'},
                        {value:135, name:'视频广告'},
                        {value:1548, name:'搜索引擎'}
                    ]
                }]

饼图的圆心位置一定要改,不然你会发现即使你series里面有再多的饼图都只显示一个,因为重叠在同一个位置。

此时时间轴的控制还没有做出来,其实有了上面的思想,下面做时间轴确实很简单。
时间轴要做的就是点击时间点的时候切换显示的数据,我们只要在options内再复制之前的series,修改里面的数据就可以了,你们会发现options结构是这样的:

options:[{},{},{}] //我们添加的series封装在第二个和第三个中括号内即可

下面是options全部代码:

      options:[{
            title : {
                text: '某站点用户访问来源',
                subtext: '纯属虚构',
                x:'center'
            },
            tooltip : {
                trigger: 'item',
                formatter: "{a} <br/>{b} : {c} ({d}%)"
            },
            legend: {
                orient : 'vertical',
                x : 'left',
                data:['直接访问','邮件营销','联盟广告','视频广告','搜索引擎']
            },
            calculable : true,
            series : [
                {
                    name:'访问来源',
                    type:'pie',
                    radius : '55%',
                    center: ['20%', '60%'],
                    data:[
                        {value:335, name:'直接访问'},
                        {value:310, name:'邮件营销'},
                        {value:234, name:'联盟广告'},
                        {value:135, name:'视频广告'},
                        {value:1548, name:'搜索引擎'}
                    ]
                },
                {
                    name:'访问来源',
                    type:'pie',
                    radius : '55%',
                    center: ['50%', '60%'],
                    data:[
                        {value:335, name:'直接访问'},
                        {value:310, name:'邮件营销'},
                        {value:234, name:'联盟广告'},
                        {value:135, name:'视频广告'},
                        {value:1548, name:'搜索引擎'}
                    ]
                },{
                    name:'访问来源',
                    type:'pie',
                    radius : '55%',
                    center: ['80%', '60%'],
                    data:[
                        {value:335, name:'直接访问'},
                        {value:310, name:'邮件营销'},
                        {value:234, name:'联盟广告'},
                        {value:135, name:'视频广告'},
                        {value:1548, name:'搜索引擎'}
                    ]
                }
            ]},{
                series : [
                {
                    name:'访问来源',
                    type:'pie',
                    radius : '55%',
                    center: ['20%', '60%'],
                    data:[
                        {value:235, name:'直接访问'},
                        {value:310, name:'邮件营销'},
                        {value:134, name:'联盟广告'},
                        {value:135, name:'视频广告'},
                        {value:548, name:'搜索引擎'}
                    ]
                },
                {
                    name:'访问来源',
                    type:'pie',
                    radius : '55%',
                    center: ['50%', '60%'],
                    data:[
                        {value:235, name:'直接访问'},
                        {value:310, name:'邮件营销'},
                        {value:134, name:'联盟广告'},
                        {value:135, name:'视频广告'},
                        {value:548, name:'搜索引擎'}
                    ]
                },{
                    name:'访问来源',
                    type:'pie',
                    radius : '55%',
                    center: ['80%', '60%'],
                    data:[
                        {value:235, name:'直接访问'},
                        {value:310, name:'邮件营销'},
                        {value:134, name:'联盟广告'},
                        {value:135, name:'视频广告'},
                        {value:548, name:'搜索引擎'}
                    ]
                }
            ]
            },{}] //在最后一个{}里添加series即可控制最后一个时间点数据

有了上面的思想便可以做出一个时间轴控制多个图表的效果,如下图所示:
代码案例图示

2.修改饼图区域颜色

ECharts中有专门的语句修改颜色,如果想修改饼图每个区域的颜色,只需要在options中加入以下代码:

color: ['rgb(46,199,201)', 'rgb(182,162,222)', 'rgb(90,177,239)', 'rgb(255,185,128)', 'rgb(216,122,128)'],

颜色的顺序按照data里的数据顺序来。

### 设置 X 轴为时间轴的方法 在 ECharts 中,可以轻松实现将 X 轴设置为时间轴的功能。以下是具体配置方式以及注意事项: #### 配置项说明 为了使 X 轴成为时间轴,需将其 `type` 属性设为 `'time'`[^2]。这表示 X 轴的数据会被解析为时间戳或日期字符串。同时,可以通过指定 `min` 和 `max` 来定义时间范围。 以下是一个完整的配置示例: ```javascript option = { xAxis: { type: 'time', // 将 X 轴类型设置为时间轴 min: startTime, // 定义起始时间 max: endTime, // 定义结束时间 boundaryGap: false, // 是否留白,默认为 true axisLabel: { // 自定义标签样式 formatter: function(value) { const date = new Date(value); const monthDay = (date.getMonth() + 1) + '-' + date.getDate(); const year = date.getFullYear(); return `${monthDay}\n${year}`; // 显示为多行格式 } } }, yAxis: { type: 'value' // Y 轴保持数值型 }, series: [{ data: [ [new Date('2023-01-01').getTime(), 10], [new Date('2023-01-02').getTime(), 20], [new Date('2023-01-03').getTime(), 30] ], type: 'line' }] }; ``` 上述代码中,通过自定义 `formatter` 函数实现了更友好的时间展示效果[^3]。如果希望进一步优化视觉体验,还可以调整字体大小、颜色等属性来增强可读性。 #### 数据准备 当使用时间轴时,确保传入的数据能够被 JavaScript 的 `Date` 对象识别。通常情况下,推荐提供 Unix 时间戳(毫秒级),或者 ISO 8601 格式的日期字符串(如 `"2023-01-01"`)。这样能有效减少因区域差异带来的兼容性问题。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值