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

如何在Syncfusion Flutter Cartesian图表中绘制指定y值的水平线/水平射线

实现方案

你需要的水平射线效果可以通过Syncfusion Flutter Charts内置的**Y轴绘图带(PlotBand)**功能实现,该方案天然支持图表缩放、平移适配,无需手动计算容器宽度。

效果参考

参考效果

核心修改步骤

  1. 首先定义需要绘制水平线的目标数据点集合,示例中我们假设要给索引为2的数据点加水平射线:
// 存放要绘制水平线的目标数据点
late ChartData targetPoint;
  1. 在initState中初始化目标点:
@override
void initState() {
  super.initState();
  _selectionBehavior = SelectionBehavior(enable: true);
  // 示例默认选中第2个索引的数据点
  targetPoint = getData()[2];
}
  1. 为Y轴配置plotBands属性,动态计算射线的长度比例:
SfCartesianChart(
  primaryYAxis: NumericAxis(
    plotBands: [
      PlotBand(
        start: targetPoint.y,
        end: targetPoint.y,
        borderWidth: 1,
        borderColor: Colors.black,
        // 如需虚线效果可开启
        // dashArray: [4, 2],
        // 射线起点为X轴最左侧
        associatedAxisStart: 0,
        // 射线终点为目标数据点在X轴的相对位置
        associatedAxisEnd: targetPoint.x.difference(chartData[chartData.length - 29].x).inMilliseconds /
            chartData[chartData.length -1].x.difference(chartData[chartData.length -29].x).inMilliseconds,
      )
    ],
  ),
  // 其余原有配置保持不变
  primaryXAxis: DateTimeAxis(
    intervalType: DateTimeIntervalType.days,
    visibleMinimum: chartData[chartData.length - 29].x,
    visibleMaximum: chartData[chartData.length - 1].x,
  ),
  // ... 其余原有代码
)

交互适配说明

如果需要点击选中数据点时动态切换水平线,只需监听LineSeries的onSelectionChanged事件,更新targetPoint后调用setState刷新即可,PlotBand会自动适配新的位置。
该方案相比自定义Annotation的优势:

  • 自动适配图表缩放、平移、X轴范围变化,不会出现长度错位
  • 性能更优,属于图表原生渲染逻辑
  • 支持实线、虚线等多种样式配置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:15:04