编辑我重写了我的问题,以使它在与Tony进行下面的对话后更加易于理解(谢谢!)。

目标在同一图表中渲染多个折线图(假设2)。图表具有不同的x/y值对。对于一个x值,我不知道两个y值。

我正在使用Silverlight。可用于此的类是SerialChartLineGraph。两个图的数据源是相同的,并在SerialChart级别设置。还为两个图表(CategoryValueMemberPath)定义了x轴的属性名称。

正如amCharts文档所建议的那样,我们需要创建一个对象,该对象的类别轴(x轴)具有一个属性,然后每个图形具有一个属性。我们称它们为“Graph1”和“Graph2”。因此,数据源看起来像这样:

List<MyClass> data = new List<MyClass>()
{
   new MyClass() { Category = 0.1, Graph1 = 0.14, Graph2 = ??? }
  ,new MyClass() { Category = 0.15, Graph1 = ???, Graph2 = 0.05 }
  ,new MyClass() { Category = 0.2, Graph1 = 0.35, Graph2 = ??? }
  ,new MyClass() { Category = 0.18, Graph1 = ???, Graph2 = 0.12 }
  ... and so on ...
}

问题我应该如何处理“???”?值(value)观?我没有该类别值的该图的实际值。

如果我未设置值,则假定默认值为0.0,它将在x轴上绘制一个尖峰。如果我设置了先前已知的Graph1/Graph2值,那么它将创建一个水平连接,而该水平连接不应该是一个。我基本上是在改变图表,导致错误的结果。

那么我该如何解决呢?我感到amCharts不支持这种情况。

最佳答案

您需要添加两个“值”轴,一个在X方向上,一个在Y方向上(想像,像气泡图)。

// AXES
// X
var xAxis = new AmCharts.ValueAxis();
xAxis.position = "bottom";
xAxis.gridAlpha = 0.1;
xAxis.autoGridCount = true;
chart.addValueAxis(xAxis);

// Y
var yAxis = new AmCharts.ValueAxis();
yAxis.position = "left";
yAxis.gridAlpha = 0.1;
yAxis.autoGridCount = true;
chart.addValueAxis(yAxis);

使用通用的X轴字段名称(在我的示例中为'x')将所有数据点合并到一个数组中,并为第1行上的点添加一个属性'line1'及其值,为第2行上的点添加一个属性“line2”的属性。

例如,您的数据如下所示:
var chartData = [
  {x:0.1,line1:0.25},
  {x:0.246,line1:0.342},

  {x:0.12,line2:0.16},
  {x:0.3,line2:0.485}
];

然后为图表的每一行添加一个“图形”,以指定从对象数组中获取值的位置。
// GRAPHS
var graph = new AmCharts.AmGraph();
graph.xField = "x";
graph.yField = "line1";
graph.lineAlpha = 1;
graph.lineColor = '#FF9E01';
chart.addGraph(graph);

var graph2 = new AmCharts.AmGraph();
graph2.xField = "x";
graph2.yField = "line2";
graph.lineAlpha = 1;
graph2.lineColor = '#9EFF01';
chart.addGraph(graph2);

我已将所有这些放到您的 fiddle 中-http://jsfiddle.net/64EWx/

10-06 04:00