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

AmCharts5 平滑折线图如何在同一图表中添加第二条折线

问题根因

你只创建了1个平滑折线系列(SmoothedXLineSeries)实例,单系列实例只能渲染1条折线。另外你调用series.data.setAll(data,data_uver)的写法也是错的:setAll方法只会读取第一个传入的数组作为当前系列的数据源,第二个参数会被直接丢弃,所以不管传多少组数据,都只会显示一条线。

正确实现步骤
  • 为第二条折线单独新建一个SmoothedXLineSeries实例,和第一条折线共用已创建的x、y轴
  • 给两个系列实例分别绑定自己对应的数据源
  • 按需给第二个系列配置填充透明度、数据点样式、提示框文本即可
修正后的完整可运行代码
am5.ready(function() {
var root = am5.Root.new("chartdiv");

root.setThemes([
    am5themes_Animated.new(root)
]);

var chart = root.container.children.push(am5xy.XYChart.new(root, {
panX: true,
panY: true,
wheelX: "panX",    
wheelY: "zoomX",
pinchZoomX:true
}));

var cursor = chart.set("cursor", am5xy.XYCursor.new(root, {
behavior: "none"
}));
cursor.lineY.set("visible", false);

function generateDataInvestice(roky,investice) {
   value = investice;
   return {
   date: roky,
   value: value
};
}

function generateDatasInvestice(count,i) {
  var data = [];
  var investice = 5;
  for (var i = 1; i < count; ++i) {
    data.push(generateDataInvestice(i,investice));
  }
  return data;
}

function generateDataUver(roky,uver) {
  value = uver;
  return {
    date: roky,
    value: value
  };
}
function generateDatasUver(count,i) {
  var data = [];
  var uver = 1;
  for (var i = 1; i < count; ++i) {
    data.push(generateDataUver(i,uver));
  }
  return data;
}

var xAxis = chart.xAxes.push(am5xy.ValueAxis.new(root, {
  maxDeviation: 1,
  baseInterval: {
    count: 1
  },
  renderer: am5xy.AxisRendererX.new(root, {
  pan:"zoom"
}),
  tooltip: am5.Tooltip.new(root, {})
}));

var yAxis = chart.yAxes.push(am5xy.ValueAxis.new(root, {
  maxDeviation:1,
  renderer: am5xy.AxisRendererY.new(root, {
  pan:"zoom"
})
}));

// 第一条投资折线
var seriesInvestice = chart.series.push(am5xy.SmoothedXLineSeries.new(root, {
  name: "投资",
  xAxis: xAxis,
  yAxis: yAxis,
  valueYField: "value",
  valueXField: "date",
  tooltip: am5.Tooltip.new(root, {
    labelText: "投资值:{valueY}"
  })
}));

seriesInvestice.fills.template.setAll({
  visible: true,
  fillOpacity: 0.2
});

seriesInvestice.bullets.push(function() {
  return am5.Bullet.new(root, {
    locationY: 0,
    sprite: am5.Circle.new(root, {
      radius: 4,
      stroke: root.interfaceColors.get("background"),
      strokeWidth: 2,
      fill: seriesInvestice.get("fill")
    })
  });
});

// 第二条贷款折线 单独创建系列实例
var seriesUver = chart.series.push(am5xy.SmoothedXLineSeries.new(root, {
  name: "贷款",
  xAxis: xAxis,
  yAxis: yAxis,
  valueYField: "value",
  valueXField: "date",
  // 可手动指定颜色区分两条线,比如 stroke: am5.color(0xff6666), fill: am5.color(0xff6666)
  tooltip: am5.Tooltip.new(root, {
    labelText: "贷款值:{valueY}"
  })
}));

seriesUver.fills.template.setAll({
  visible: true,
  fillOpacity: 0.2
});

seriesUver.bullets.push(function() {
  return am5.Bullet.new(root, {
    locationY: 0,
    sprite: am5.Circle.new(root, {
      radius: 4,
      stroke: root.interfaceColors.get("background"),
      strokeWidth: 2,
      fill: seriesUver.get("fill")
    })
  });
});

var data = generateDatasInvestice(30,0);
var data_uver = generateDatasUver(30,0);
// 分别给两个系列绑定数据源
seriesInvestice.data.setAll(data);
seriesUver.data.setAll(data_uver);

seriesInvestice.appear(30);
seriesUver.appear(30);
chart.appear(1000, 100);

});
补充提示

AmCharts v5的XY图支持在同一坐标系下添加任意多个系列,不管是折线、柱状、面积图都可以混排,核心规则就是每一个可视化图形对应一个独立的series实例,不要尝试给单个series传多组数据实现多图形展示。如果需要加图例,直接在chart容器下新增Legend组件,把需要展示的series传入即可自动生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 12:57:12