You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LightningChart.js共享X轴下堆叠双Y轴折线图实现咨询

用LightningChart.js实现上下堆叠双Y轴折线图(共享X轴)

LightningChart.js的ChartXY默认Y轴仅支持左右布局,没法直接将Y轴移到上下位置,但有两种可行方案实现你要的效果:

方法一:双ChartXY组件上下拼接(推荐)

这是最直观、易维护的方案——用两个独立的ChartXY上下排列,同步它们的X轴范围,视觉上就像共享一个X轴:

  • 创建两个图表实例,分别绑定到不同的DOM容器:
    // 初始化上下两个图表
    const chartTop = lightningChart().ChartXY({ container: 'chart-top' })
    const chartBottom = lightningChart().ChartXY({ container: 'chart-bottom' })
    
  • 隐藏底部图表的X轴,只保留顶部的X轴,营造共用X轴的视觉效果:
    chartBottom.getDefaultAxisX().setVisible(false)
    
  • 同步X轴交互,确保拖拽、缩放时两个图表的X轴范围始终一致:
    // 顶部X轴范围变化时同步到底部
    chartTop.getDefaultAxisX().onScaleChange((start, end) => {
        chartBottom.getDefaultAxisX().setInterval(start, end)
    })
    // 底部X轴范围变化时同步到顶部(可选,根据交互需求开启)
    chartBottom.getDefaultAxisX().onScaleChange((start, end) => {
        chartTop.getDefaultAxisX().setInterval(start, end)
    })
    
  • 用CSS让容器无缝贴合,消除间距:
    #chart-top, #chart-bottom {
        width: 100%;
        height: 50%;
        padding: 0;
        margin: 0;
        border: none;
    }
    
  • 分别向两个图表添加折线数据:
    // 顶部图表的折线系列
    const seriesTop = chartTop.addLineSeries()
    seriesTop.add([{x: 0, y: 10}, {x: 1, y: 15}, {x: 2, y: 8}])
    // 底部图表的折线系列
    const seriesBottom = chartBottom.addLineSeries()
    seriesBottom.add([{x: 0, y: 5}, {x: 1, y: 3}, {x: 2, y: 7}])
    

方法二:自定义轴位置(进阶)

如果不想用两个独立图表,也可以手动调整Y轴的绝对位置,但需要自行处理布局适配:

  • 创建单个ChartXY并添加两个Y轴:
    const chart = lightningChart().ChartXY()
    const yAxisTop = chart.addAxisY()
    const yAxisBottom = chart.addAxisY()
    
  • 设置Y轴的绝对位置,分别放到图表顶部和底部:
    // 顶部Y轴固定在图表顶部区域
    yAxisTop.setPosition({
        type: 'absolute',
        x: 0,
        y: 0,
        width: chart.getInnerWidth(),
        height: 20
    })
    // 底部Y轴固定在图表底部区域
    yAxisBottom.setPosition({
        type: 'absolute',
        x: 0,
        y: chart.getInnerHeight() - 20,
        width: chart.getInnerWidth(),
        height: 20
    })
    
  • 将折线系列分别绑定到对应Y轴:
    const seriesTop = chart.addLineSeries({ yAxis: yAxisTop })
    const seriesBottom = chart.addLineSeries({ yAxis: yAxisBottom })
    

这种方法需要额外处理窗口大小变化时的轴位置更新,适合有高度定制化布局需求的场景。


内容的提问来源于stack exchange,提问作者abs66642

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 02:52:33