2016-12-13 21 views
0

在C#代码隐藏我定义一些清单是这样的:Plotly数据环

public List<string> divs = new List<string>(); 
public List<List<string>> names = new List<List<string>>(); 
public List<List<List<string>>> labels = new List<List<List<string>>>(); 
public List<List<List<double>>> longitude = new List<List<List<double>>>(); 

相当大名单我知道,但我觉得有必要对正从正常组织我的源我的所有信息。

在JS

我这些序列是这样的:

var divArr = <%=new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(divs)%>; 
var names = <%=new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(names)%>; 
var lbl = <%=new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(labels)%>; 
var long = <%=new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(longitude)%>; 

然后我尝试做一个函数来绘制所有这些单独图形。我的页面上总共有10个图表,它们可以有多行。试图使我的页面尽可能动态。所以我有一个函数来循环所有这些,并尝试绘制所有这些。

function doGraph(){ 
    for(index = 0; index < divArr.length; ++index){ 
     (function() { 

      var data = []; 
      for(indx = 0; indx < lbl[index].length; ++indx){ 
       var trace = { 
        name: names[index][indx], 
        x: lbl[index][indx], 
        y: long[index][indx], 
        mode:'lines' 
       }; 
       data.push(trace); 
      } 

      var gd = document.getElementById(divArr[index]); 
      plotly.newPlot(gd,data); 

       })(); 
      } 
} 

它几乎可以工作。每张图似乎都绘制了给予它的第一组数据,但没有任何后续字。也许我一直在盯着这个太久,但我不明白我在这里做错了什么,但我确信这是我刚才看过的东西。或者,也许我过度了,我不能做这种事情?任何见解都被赞赏!

+0

你的javascript代码混淆了我,看起来像错误的支架使用。此外,我不明白使用内部函数'(function(){'在第3行 - 但我不是一个JavaScript专业版。此外,我认为你需要一个大的P''Plotly.newPlot(gd,data)' – flipperweid

+0

@flipperweid你是正确的Plotly被大写。错过了。我不是JavaScript的专业版,但我想要做的循环是做一个跟踪数据数组。var数组是一个数组,每个var跟踪虽然我找不到像Plotly这样的具体例子,所以我不确定我是否正确地做到了这一点 – Guernica88

+0

@flipperweid我想通了,并在下面添加了我的答案真正的问题是我的疯狂列表和它们的序列化。感谢您的输入,尽管我清理了我的代码。 – Guernica88

回答

0

所以我发现问题是从我的列表到js数组的序列化。显然,js serialize不能很好地处理我疯狂使用的多维列表的级别。所以我固定它通过使列出一个水平不太深并提出另一个列表来跟踪它们是如何“深”是用这种方式:

C#代码隐藏:

public List<List<string>> names = new List<List<string>>(); 
public List<int> numObjs = new List<int>(); 
public List<List<string>> labels = new List<List<string>>(); 
public List<List<double>> longitude = new List<List<double>>(); 

JS连载:

var divArr = <%=new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(divs)%>; 
var names = <%=new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(names)%>; 
var numO = <%=new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(numObjs)%>; 
var lbl = <%=new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(labels)%>; 
var long = <%=new System.Web.Script.Serialization.JavaScriptSerializer().Serialize(longitude)%>; 

那么JS功能有这样一个循环的实际变化:

function doGraph(){ 
     var cur = 0; 
     for(var index = 0; index < divArr.length; ++index){ 
       var data = []; 
       var top = cur + numO[index]; 
       for(var indx = cur; indx < top; ++indx){ 
        data.push({ 
         name: names[indx], 
         mode:'lines', 
         x: lbl[indx], 
         y: long[indx], 
        }); 
        cur++; 
       } 

       var gd = document.getElementById(divArr[index]); 
       Plotly.newPlot(gd, data, 
           layout , {scrollZoom:true,modeBarButtonsToRemove:['sendDataToCloud'],showLink:false,displaylogo:false}); 
     } 
} 

而且@ flipperweid说,我在一个函数中的函数肯定是不必要的。