折线图 (Line Chart)

 前端   小卒子   2024-10-10 14:30   99

ECharts 折线图:深入掌握绘制基本折线图

ECharts 是一个非常灵活且强大的数据可视化库,能够帮助我们创建多样的图表类型。本文将详细介绍如何使用 ECharts 绘制基本的折线图,处理多条折线、多轴以及数据标记等内容。

一、折线图的基础知识

折线图主要用于展示数据的变化趋势。ECharts 提供了丰富的配置选项,使得我们可以自定义图表的各个方面,包括颜色、标记、坐标轴等。

1. 折线图的基本结构

折线图的基本结构由以下几部分组成:

  • title:图表标题
  • tooltip:提示框
  • legend:图例
  • xAxis:横坐标
  • yAxis:纵坐标
  • series:数据系列

二、安装 ECharts

在开始之前,请确保在项目中引入 ECharts。可以通过 CDN 进行引入:

<script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>

将上述代码添加到 HTML 文件的 <head> 部分。

三、创建基本的折线图

1. 定义 HTML 结构

首先,我们需要定义一个用于展示折线图的 <div> 容器:

<div id="lineChart" style="width: 600px; height: 400px;"></div>

2. 配置折线图的 option

下面是一个基本的折线图配置示例:

var lineChart = echarts.init(document.getElementById('lineChart'));

var lineOption = {
    title: {
        text: '销售额变化趋势',
        left: 'center',
        textStyle: {
            color: '#333',
            fontSize: 20
        }
    },
    tooltip: {
        trigger: 'axis'
    },
    legend: {
        data: ['产品A', '产品B'],
        top: '10%'
    },
    xAxis: {
        type: 'category',
        data: ['1月', '2月', '3月', '4月', '5月'],
        axisLabel: {
            textStyle: {
                color: '#666',
                fontSize: 14
            }
        }
    },
    yAxis: {
        type: 'value',
        axisLabel: {
            formatter: '{value} 元',
            textStyle: {
                color: '#666',
                fontSize: 14
            }
        }
    },
    series: [
        {
            name: '产品A',
            type: 'line',
            data: [1200, 1500, 2000, 2500, 3000],
            itemStyle: {
                color: '#FF5733'
            },
            markPoint: {
                data: [
                    { type: 'max', name: '最大值' },
                    { type: 'min', name: '最小值' }
                ]
            },
            markLine: {
                data: [
                    { type: 'average', name: '平均值' }
                ]
            }
        },
        {
            name: '产品B',
            type: 'line',
            data: [800, 1000, 1500, 2000, 2500],
            itemStyle: {
                color: '#3398DB'
            },
            markPoint: {
                data: [
                    { type: 'max', name: '最大值' },
                    { type: 'min', name: '最小值' }
                ]
            },
            markLine: {
                data: [
                    { type: 'average', name: '平均值' }
                ]
            }
        }
    ]
};

lineChart.setOption(lineOption);

3. 完整的 HTML 代码示例

以下是完整的 HTML 文件代码,包含基本折线图的创建和渲染:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ECharts 折线图示例</title>
    <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>
</head>
<body>
    <h1>使用 ECharts 绘制折线图</h1>
    <div id="lineChart" style="width: 600px; height: 400px;"></div>

    <script>
        var lineChart = echarts.init(document.getElementById('lineChart'));

        var lineOption = {
            title: {
                text: '销售额变化趋势',
                left: 'center',
                textStyle: {
                    color: '#333',
                    fontSize: 20
                }
            },
            tooltip: {
                trigger: 'axis'
            },
            legend: {
                data: ['产品A', '产品B'],
                top: '10%'
            },
            xAxis: {
                type: 'category',
                data: ['1月', '2月', '3月', '4月', '5月'],
                axisLabel: {
                    textStyle: {
                        color: '#666',
                        fontSize: 14
                    }
                }
            },
            yAxis: {
                type: 'value',
                axisLabel: {
                    formatter: '{value} 元',
                    textStyle: {
                        color: '#666',
                        fontSize: 14
                    }
                }
            },
            series: [
                {
                    name: '产品A',
                    type: 'line',
                    data: [1200, 1500, 2000, 2500, 3000],
                    itemStyle: {
                        color: '#FF5733'
                    },
                    markPoint: {
                        data: [
                            { type: 'max', name: '最大值' },
                            { type: 'min', name: '最小值' }
                        ]
                    },
                    markLine: {
                        data: [
                            { type: 'average', name: '平均值' }
                        ]
                    }
                },
                {
                    name: '产品B',
                    type: 'line',
                    data: [800, 1000, 1500, 2000, 2500],
                    itemStyle: {
                        color: '#3398DB'
                    },
                    markPoint: {
                        data: [
                            { type: 'max', name: '最大值' },
                            { type: 'min', name: '最小值' }
                        ]
                    },
                    markLine: {
                        data: [
                            { type: 'average', name: '平均值' }
                        ]
                    }
                }
            ]
        };

        lineChart.setOption(lineOption);
    </script>
</body>
</html>

四、处理多条折线图

在上面的示例中,我们已经演示了如何绘制多条折线。在 series 数组中,每个对象代表一条折线,可以通过 name 属性指定每条折线的名称。

1. 动态更新数据

可以使用 ECharts 提供的 setOption 方法动态更新数据。以下是一个示例:

function updateData() {
    var newDataA = [1500, 1800, 2100, 2500, 3200];
    var newDataB = [900, 1100, 1600, 2200, 2700];

    lineChart.setOption({
        series: [
            { data: newDataA },
            { data: newDataB }
        ]
    });
}

// 5秒后更新数据
setTimeout(updateData, 5000);

五、使用多个坐标轴

ECharts 允许使用多个坐标轴,适用于不同的数据类型。在这里,我们将展示如何配置多个 Y 轴,以便于比较不同单位的数据。

1. 完整示例

以下是一个使用多个 Y 轴的折线图示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>多坐标轴折线图示例</title>
    <script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>
</head>
<body>
    <h1>多坐标轴折线图</h1>
    <div id="multiAxisChart" style="width: 600px; height: 400px;"></div>

    <script>
        var multiAxisChart = echarts.init(document.getElementById('multiAxisChart'));

        var multiAxisOption = {
            title: {
                text: '产品销售与利润',
                left: 'center',
                textStyle: {
                    color: '#333',
                    fontSize: 20
                }
            },
            tooltip: {
                trigger: 'axis'
            },
            legend: {
                data: ['销量', '利润'],
                top: '10%'
            },
            xAxis: {
                type: 'category',
                data: ['1月', '2月', '3月', '4月', '5月']
            },
            yAxis: [
                {
                    type: 'value',
                    name: '销量',
                    position: 'left',
                    axisLabel: {
                        formatter: '{value} 件'
                    }
                },
                {
                    type: 'value',
                    name: '利润',
                    position: 'right',
                    axisLabel: {
                        formatter: '{value} 元'
                    }
                }
            ],
            series: [
                {
                    name: '销量',
                    type: 'line',
                    data: [1200, 1500, 2000, 2500, 3000],
                    itemStyle: {
                        color: '#FF5733'
                    },
                    yAxisIndex: 0 // 使用左侧Y轴
                },
                {
                    name: '利润',
                    type: 'line',
                    data: [300, 400, 500, 800, 1000],
                    itemStyle: {
                        color: '#3398DB'
                    },
                    yAxisIndex: 1 // 使用右侧Y轴
                }
            ]
        };

        multiAxisChart.setOption(multiAxisOption);
    </script>
</body>
</html>

六、数据标记与交互

在折线图中,我们可以使用 markPointmarkLine 来添加数据标记和参考线,使得图表更加丰富和易于理解。

1. 数据标记

markPoint 用于标记特定的数据点,可以用来突出显示最大值、最小值等关键数据。markLine 用于在图表中添加参考线,比如平均值线。

markPoint: {
    data: [
        { type: 'max', name: '最大值' },
        { type: 'min', name: '最小值' }
    ]
},
markLine: {
    data: [
        { type: 'average', name: '平均值' }
    ]
}

在上面的折线图示例中,我们已经添加了 markPointmarkLine,这可以帮助用户快速识别数据的关键点。

七、总结

通过本篇博客,我们深入了解了 ECharts 折线图的基本用法,包括如何绘制基本折线图、处理多条折线、多坐标轴和数据标记等内容。掌握这些基本概念后,你可以根据自己的需求创建更复杂和美观的图表。ECharts 的灵活性和丰富的配置选项将使你的数据可视化工作变得更加轻松和高效。希望本文对你的 ECharts 学习之旅有所帮助!