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

如何在LightningChart中交换X/Y轴实现AreaSeries垂直显示?

如何将LightningChart的AreaSeries垂直显示(旋转90度)

我正在使用LightningChart库,想要创建一个绑定AreaSeries的ChartXY。用React+TypeScript编写的代码运行正常,能得到预期的水平AreaSeries图表,但希望将图表旋转90度变为垂直显示。

原代码如下:

import { useEffect, useRef } from 'react';

import {
    lightningChart,
    ChartXY,
    Dashboard,
    emptyFill,
    AreaSeries,
    AreaSeriesTypes
} from "@arction/lcjs";

import './ChartTest.scss';


const ChartTest = () => {
    const chartRef = useRef(null);
    
    const dashboard = useRef<Dashboard|null>(null);
    const scallingChart2 = useRef<ChartXY|null>(null);
    const scallingChart2Serie = useRef<AreaSeries|null>(null);

    const initializeDashboard = (container:HTMLDivElement) => {
        const dashboard = lightningChart()
            .Dashboard({
                numberOfColumns: 1,
                numberOfRows: 1,
                container: container
            })
            .setRowHeight(0, 3)
            .setRowHeight(1, 1)
            .setColumnWidth(0,12)
            .setColumnWidth(1,1);

        return dashboard;
    }

    const initializeScallingChart = (dashboard:Dashboard) => {
        const chart = dashboard.createChartXY({
            columnIndex: 0,
            rowIndex: 0
        })
        .setTitleFillStyle(emptyFill)
        .setTitleMargin({ top: 0, bottom: 0 })
        .setPadding(0)

        return chart;
    }

    const renderScalingChart = (chart:ChartXY) => {
        const series = chart
            .addAreaSeries({
                type: AreaSeriesTypes.Bipolar,
            })

        for (let i=0; i<100; i++) {
            series.add({ y: Math.floor(Math.random() * 20) - 10, x: i })
        }

        return series;
    }

    useEffect(() => {
        if (chartRef.current) {
            dashboard.current = initializeDashboard(chartRef.current);

            scallingChart2.current = initializeScallingChart(dashboard.current);

            scallingChart2Serie.current = renderScalingChart(scallingChart2.current);
        }
        
        return () => {
            if (dashboard.current) {
                dashboard.current.dispose();
            }
        }
    }, []);


    return (
        <div className='chart-test' ref={chartRef} ></div>
    );
}

export default ChartTest;

尝试过的修改:

  • 互换x和y数据:
for (let i=0; i<100; i++) {
    series.add({ x: Math.floor(Math.random() * 20) - 10, y: i })
}

但结果不符合预期,因为未指定LightningChart沿Y轴绘制区域。

  • 尝试在创建AreaSeries时交换x轴和y轴,无效果:
const series = chart
    .addAreaSeries({
        type: AreaSeriesTypes.Bipolar,
        yAxis: chart.addAxisX(),
        xAxis: chart.addAxisY()
    })
  • 查看了createChartXY的配置选项,defaultAxisY仅能设置轴位置,无法实现轴交换。

解决方案

LightningChart的AreaSeries默认沿X轴绘制,要实现垂直显示,核心是让系列以Y轴作为"进度轴",以下两种方法均可实现:

方法1:启用垂直滚动模式

在创建ChartXY时配置verticalScrollMode: true,图表会自动将Y轴作为主坐标轴,AreaSeries会沿Y轴方向展开:

const initializeScallingChart = (dashboard: Dashboard) => {
    const chart = dashboard.createChartXY({
        columnIndex: 0,
        rowIndex: 0,
        verticalScrollMode: true // 启用垂直滚动模式
    })
    .setTitleFillStyle(emptyFill)
    .setTitleMargin({ top: 0, bottom: 0 })
    .setPadding(0)

    return chart;
}

数据部分保持x为随机值、y为递增索引即可,无需额外修改。

方法2:手动指定系列的主轴为Y轴

如果需要更灵活的轴配置,可以手动指定AreaSeries使用Y轴作为主轴:

const renderScalingChart = (chart: ChartXY) => {
    const yAxis = chart.getDefaultAxisY()
    const xAxis = chart.getDefaultAxisX()

    const series = chart.addAreaSeries({
        type: AreaSeriesTypes.Bipolar,
        axis: yAxis,       // 将Y轴设为主轴(数据沿Y轴推进)
        oppositeAxis: xAxis // X轴作为值范围轴
    })

    for (let i=0; i<100; i++) {
        series.add({ x: Math.floor(Math.random() * 20) - 10, y: i })
    }

    return series;
}

这种方式下,AreaSeries会沿着Y轴方向绘制,实现垂直显示的效果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:35:02