超级码吏 2025-05-28 16:29 采纳率: 27.1%
浏览 17

echarts折线图怎么实现小圆点上有引线?

想要实现个公司发展历程的展示,年头比较长可以左右拖动

img

但是没有引线,怎么在每个小圆点上加根引线呢?然后引线边上还有字

img

半成品代码:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>企业大事记时间轴</title>
        <script src="https://cdn.staticfile.org/echarts/5.4.2/echarts.min.js"></script>
    </head>
    <body>
        <div id="main" style="width: 100vw;height:600px;"></div>



        <script>
            // 生成模拟数据(2015-2023年)
            function generateData() {
                let data = [];
                let value = 10;
                for (let year = 2005; year <= 2025; year++) {
                    data.push({
                        time: `${year}`,
                        event: `${year}年重要里程碑`,
                        value: value ++
                    });
                }
                return data;
            }

            var myChart = echarts.init(document.getElementById('main'));
            var eventData = generateData();
            console.log(eventData);
            var option = {
                grid: {
                    bottom: '25px',
                    top: '25px',
                    left: '25px',
                    right: '25px'
                },
                xAxis: {
                    type: 'time',
                    show: false,
                },
                yAxis: {
                    show: false
                },
                dataZoom: [{
                        height: 10,
                        start: 0,
                        end: 40
                    },
                    {
                        type: 'inside',
                    }
                ],
                series: [{
                    type: 'line',
                    smooth: true,
                    data: eventData.map(item => ({
                        name: item.event,
                        value: [item.time, item.value],
                        time: item.time,
                        event: item.event
                    })),
                    lineStyle: {
                        color: '#aaabad',
                        width: 13,
                    },
                    markPoint: {
                        symbol: 'circle',
                        symbolSize: 16,
                        itemStyle: {
                            color: '#2f89cf',
                            borderColor: '#fff',
                            borderWidth: 2
                        },
                        label: {
                            show: true,
                            position: 'bottom',
                            color: '#666',
                            fontSize: 12,
                            formatter: function(params) {
                                return  params.data.time
                            }
                        },
                        data: eventData.map(item => ({
                            name: item.event,
                            coord: [item.time, item.value],
                            time: item.time
                        }))
                    }
                }]
            };

            myChart.setOption(option);
        </script>
    </body>
</html>
  • 写回答

4条回答 默认 最新

  • 宝码香车 优质创作者: JavaScript技术领域 2025-05-28 16:33
    关注

    让【宝码香车】来帮你解答,本回答参考DeepSeek编写,并整理提供。

    如果还有疑问可以点击头像关注私信或评论。如果答案让您满意,请采纳、点赞、关注,非常感谢!

    ECharts 折线图添加小圆点引线及文字说明

    要实现折线图小圆点上有引线并在引线旁边添加文字,可以通过 ECharts 的 markPointmarkLine 结合自定义 label 来实现。以下是改进后的代码:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>企业大事记时间轴</title>
            <script src="https://cdn.staticfile.org/echarts/5.4.2/echarts.min.js"></script>
        </head>
        <body>
            <div id="main" style="width: 100vw;height:600px;"></div>
    
    
            <script>
                // 生成模拟数据(2015-2023年)
                function generateData() {
                    let data = [];
                    let value = 10;
                    for (let year = 2005; year <= 2025; year++) {
                        data.push({
                            time: `${year}`,
                            event: `${year}年重要里程碑`,
                            value: value ++
                        });
                    }
                    return data;
                }
    
    
                var myChart = echarts.init(document.getElementById('main'));
                var eventData = generateData();
                
                var option = {
                    grid: {
                        bottom: '25px',
                        top: '25px',
                        left: '25px',
                        right: '25px'
                    },
                    xAxis: {
                        type: 'time',
                        show: false,
                    },
                    yAxis: {
                        show: false
                    },
                    dataZoom: [{
                            height: 10,
                            start: 0,
                            end: 40
                        },
                        {
                            type: 'inside',
                        }
                    ],
                    series: [{
                        type: 'line',
                        smooth: true,
                        data: eventData.map(item => ({
                            name: item.event,
                            value: [item.time, item.value],
                            time: item.time,
                            event: item.event
                        })),
                        lineStyle: {
                            color: '#aaabad',
                            width: 13,
                        },
                        markPoint: {
                            symbol: 'circle',
                            symbolSize: 16,
                            itemStyle: {
                                color: '#2f89cf',
                                borderColor: '#fff',
                                borderWidth: 2
                            },
                            label: {
                                show: true,
                                position: 'bottom',
                                color: '#666',
                                fontSize: 12,
                                formatter: function(params) {
                                    return params.data.time
                                }
                            },
                            data: eventData.map(item => ({
                                name: item.event,
                                coord: [item.time, item.value],
                                time: item.time,
                                event: item.event
                            }))
                        },
                        markLine: {
                            silent: true,
                            symbol: 'none',
                            lineStyle: {
                                color: '#2f89cf',
                                width: 1,
                                type: 'dashed'
                            },
                            label: {
                                show: true,
                                position: 'start',
                                formatter: function(params) {
                                    return params.data.event;
                                },
                                color: '#333',
                                fontSize: 12,
                                backgroundColor: 'rgba(255,255,255,0.8)',
                                padding: [3, 5],
                                borderRadius: 3
                            },
                            data: eventData.map(item => ([
                                {
                                    coord: [item.time, item.value],
                                    label: {
                                        position: 'start',
                                        distance: [10, 0]
                                    }
                                },
                                {
                                    coord: [item.time, item.value + 5]
                                }
                            ]))
                        }
                    }]
                };
    
    
                myChart.setOption(option);
            </script>
        </body>
    </html>
    

    关键改进点说明

    1. 引线实现:使用 markLine 来创建从小圆点向上的虚线引线
      • symbol: 'none' 去除两端的标记
      • lineStyle.type: 'dashed' 设置为虚线样式
    1. 文字说明:在 markLinelabel 中显示事件描述
      • position: 'start' 让文字显示在引线起点位置
      • distance: [10, 0] 调整文字与引线的距离
    1. 样式优化
      • 为文字添加了半透明背景 backgroundColor
      • 设置了圆角边框 borderRadius
      • 调整了文字大小和颜色

    效果说明

    折线图

    这样实现后,每个小圆点都会有一条向上的虚线引线,引线旁边会显示对应年份的事件描述文字。你可以根据需要调整引线的长度、样式和文字的位置。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月28日