微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Amcharts SerialChart多线图不同类别值成员路径(Silverlight)

编辑我改写了我的问题,以便在与Tony谈话之后让它更容易理解(谢谢!).

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

我正在使用Silverlight.可用的类是SerialChart和LineGraph.两个图的数据源相同,并在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,new MyClass() { Category = 0.18,Graph2 = 0.12 }
  ... and so on ...
}

问题关于“???”我该怎么办?值?我没有该类别值的该图表的实际值.

如果我没有设置值,则假定认值为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);

我把所有这些都放到了小提琴里 – http://jsfiddle.net/64EWx/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐