2013-12-19 61 views
1

请帮忙。一直在我的头靠在墙上这一个星期,尝试我可以找到的每一个选项,但没有运气...将json数据加载到与多个系列的highcharts

我正在使用HighCharts与C#/ Razor/WebMatrix网站。试图创建一个堆积柱形图 - 让我的类别动态加载,但无法加载系列。

我是新来的Javascript和一般的网络编程,所以请善待!

的JSON返回的数据是:

["Clubs","1850","2600","5600","4950","8535","6050","8640", 
"Fesitvals","0","0","1000","750","0","1500","3250", 
"Private","650","2300","1600","2500","0","400","900", 
"Weddings","0","1400","3600","0","0","0","0", 
"Other Income","0","0","70","540","50","0","0"] 

我试图加载之前的一系列数据绘制图表... 以下是格式化整个脚本等

脚本处理和加载Json数据集的函数弹出(请参阅粗体/斜体)。 图看起来不错,如果硬编码的序列数据,但由于该网站是数据库驱动和数据定期更换....

下面是脚本:

$(function() { 
    var ChartType = document.getElementById("CType").value; 
    var SelectMember = document.getElementById("SMbmr").value; 
    Highcharts.theme = { 

     chart: { 
      backgroundColor: { 
       linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, 
       stops: [ 
      [0, 'rgb(0, 0, 0'], 
      [1, 'rgb(0, 0, 0)'] 
     ] 
      }, 
      borderWidth: 0, 
      borderRadius: 15, 
      plotBackgroundColor: null, 
      plotShadow: false, 
      plotBorderWidth: 0 
     }, 
     title: { 
      style: { 
       color: '#FFF', 
       font: '16px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' 
      } 
     }, 
     subtitle: { 
      style: { 
       color: '#DDD', 
       font: '12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' 
      } 
     }, 
     xAxis: { 
      gridLineWidth: 0, 
      lineColor: '#999', 
      tickColor: '#999', 
      labels: { 
       style: { 
        color: '#999', 
        fontWeight: 'bold' 
       } 
      }, 
      title: { 
       style: { 
        color: '#AAA', 
        font: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' 
       } 
      } 
     }, 
     yAxis: { 
      alternateGridColor: null, 
      minorTickInterval: null, 
      gridLineColor: 'rgba(255, 255, 255, .1)', 
      minorGridLineColor: 'rgba(255,255,255,0.07)', 
      lineWidth: 0, 
      tickWidth: 0, 
      labels: { 
       style: { 
        color: '#999', 
        fontWeight: 'bold' 
       } 
      }, 
      title: { 
       style: { 
        color: '#AAA', 
        font: 'bold 12px Lucida Grande, Lucida Sans Unicode, Verdana, Arial, Helvetica, sans-serif' 
       } 
      } 
     }, 
     legend: { 
      itemStyle: { 
       color: '#CCC' 
      }, 
      itemHoverStyle: { 
       color: '#FFF' 
      }, 
      itemHiddenStyle: { 
       color: '#333' 
      } 
     }, 
     labels: { 
      style: { 
       color: '#CCC' 
      } 
     }, 
     tooltip: { 
      backgroundColor: { 
       linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, 
       stops: [ 
      [0, 'rgba(96, 96, 96, .8)'], 
      [1, 'rgba(16, 16, 16, .8)'] 
     ] 
      }, 
      borderWidth: 0, 
      style: { 
       color: '#FFF' 
      } 
     }, 


     plotOptions: { 
      series: { 
       shadow: true 
      }, 
      line: { 
       dataLabels: { 
        color: '#CCC' 
       }, 
       marker: { 
        lineColor: '#333' 
       } 
      }, 
      spline: { 
       marker: { 
        lineColor: '#333' 
       } 
      }, 
      scatter: { 
       marker: { 
        lineColor: '#333' 
       } 
      }, 
      candlestick: { 
       lineColor: 'white' 
      } 
     }, 

     toolbar: { 
      itemStyle: { 
       color: '#CCC' 
      } 
     }, 

     navigation: { 
      buttonOptions: { 
       symbolStroke: '#DDDDDD', 
       hoverSymbolStroke: '#FFFFFF', 
       theme: { 
        fill: { 
         linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, 
         stops: [ 
        [0.4, '#606060'], 
        [0.6, '#333333'] 
       ] 
        }, 
        stroke: '#000000' 
       } 
      } 
     }, 

     // scroll charts 
     rangeSelector: { 
      buttonTheme: { 
       fill: { 
        linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, 
        stops: [ 
       [0.4, '#888'], 
       [0.6, '#555'] 
      ] 
       }, 
       stroke: '#000000', 
       style: { 
        color: '#CCC', 
        fontWeight: 'bold' 
       }, 
       states: { 
        hover: { 
         fill: { 
          linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, 
          stops: [ 
        [0.4, '#BBB'], 
        [0.6, '#888'] 
        ] 
         }, 
         stroke: '#000000', 
         style: { 
          color: 'white' 
         } 
        }, 
        select: { 
         fill: { 
          linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, 
          stops: [ 
        [0.1, '#000'], 
        [0.3, '#333'] 
        ] 
         }, 
         stroke: '#000000', 
         style: { 
          color: 'yellow' 
         } 
        } 
       } 
      }, 
      inputStyle: { 
       backgroundColor: '#333', 
       color: 'silver' 
      }, 
      labelStyle: { 
       color: 'silver' 
      } 
     }, 

     navigator: { 
      handles: { 
       backgroundColor: '#666', 
       borderColor: '#AAA' 
      }, 
      outlineColor: '#CCC', 
      maskFill: 'rgba(16, 16, 16, 0.5)', 
      series: { 
       color: '#7798BF', 
       lineColor: '#A6C7ED' 
      } 
     }, 

     scrollbar: { 
      barBackgroundColor: { 
       linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, 
       stops: [ 
       [0.4, '#888'], 
       [0.6, '#555'] 
      ] 
      }, 
      barBorderColor: '#CCC', 
      buttonArrowColor: '#CCC', 
      buttonBackgroundColor: { 
       linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, 
       stops: [ 
       [0.4, '#888'], 
       [0.6, '#555'] 
      ] 
      }, 
      buttonBorderColor: '#CCC', 
      rifleColor: '#FFF', 
      trackBackgroundColor: { 
       linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, 
       stops: [ 
      [0, '#000'], 
      [1, '#333'] 
     ] 
      }, 
      trackBorderColor: '#666' 
     }, 

     // special colors for some of the demo examples 
     legendBackgroundColor: 'rgba(48, 48, 48, 0.8)', 
     legendBackgroundColorSolid: 'rgb(70, 70, 70)', 
     dataLabelsColor: '#444', 
     textColor: '#E0E0E0', 
     maskColor: 'rgba(255,255,255,0.3)' 
    }; 

    // Apply the theme 
    var highchartsOptions = Highcharts.setOptions(Highcharts.theme); 
    var CatName = new Array(); 
    var DataSeries = new Array(); 
    var currentDate = new Date(); 
    var currentYear = currentDate.getFullYear(); 
    for (var i = 2007; i <= currentYear; i++) { 
     CatName.push(i.toString()); 
    } 
    ***$.getJSON('/Admin/Accounting/ChartJSon/' + ChartType + '/0', function (DataSet) { 
      options.series = DataSet; 
    });*** 
    $('#container').highcharts(
     { 

      chart: 
      { 
       renderTo: 'container', 
       defaultSeriesType: 'column', 
       plotBorderWidth: 1, 
       plotBorderColor: '#3F4044' 
      }, 
      credits: { enabled: false }, 
      title: 
      { 
       text: 'Sales by Type and Year' 
      }, 

      xAxis: 
      { 
       categories: CatName 
      }, 

      yAxis: 
      { 
       allowDecimals: false, 
       min: 0, 
       title: 
       { 
        text: 'Sales' 
       } 
      }, 

      tooltip: 
      { 
       formatter: function() { 
        return '<b>' + this.x + '</b><br/>' + 
         this.series.name + ': ' + this.y + '<br/>' + 
         'Total: ' + this.point.stackTotal; 
       } 
      }, 

      plotOptions: 
      { 
       column: 
       { 
        stacking: 'normal' 
       } 
      }, 

      series: [] 
     }); 

}); 
+0

您有这方面的JSFiddle吗? http://jsfiddle.net/ –

回答

0

嗯,我在这里看到了一些问题。首先尝试用下面提到的代码替换高位代码。因为您需要为系列选项中的每个系列指定数据。并提供唯一的名称。

$('#container').highcharts(
       { 

        chart: 
        { 
         renderTo: 'container', 
         defaultSeriesType: 'column', 
         plotBorderWidth: 1, 
         plotBorderColor: '#3F4044' 
        }, 
        credits: { enabled: false }, 
        title: 
        { 
         text: 'Sales by Type and Year' 
        }, 

        xAxis: 
        { 
         categories: CatName 
        }, 

        yAxis: 
        { 
         allowDecimals: false, 
         min: 0, 
         title: 
         { 
          text: 'Sales' 
         } 
        }, 

        tooltip: 
        { 
         formatter: function() { 
          return '<b>' + this.x + '</b><br/>' + 
           this.series.name + ': ' + this.y + '<br/>' + 
           'Total: ' + this.point.stackTotal; 
         } 
        }, 

        plotOptions: 
        { 
         column: 
         { 
          stacking: 'normal' 
         } 
        }, 

        series: [{ 
         name: 'Clubs', 
         data: [] 
        }, { 
         name: 'Festivals', 
         data: [] 
        }, { 
         name: 'Private', 
         data: [], 
        }, { 
         name: 'Weddings', 
         data: [], 
        }, { 
         name: 'OtherIncome', 
         data: [], 
        }] 
       }); 

     }); 

而你的JSON应该是一个只包含数字的数组。

0
  1. 图初始化应在insie的getJSON身体,因为你尝试初始化图表,然后前面的数据是从URL
  2. 在JSON你需要使用数字,而不是琴弦。如果不是可能的,你需要通过parseFloat在每个数据值中解析JavaScript中的值。
  3. 您的系列数据对象应该只包含数字,而不是像“Fesitvals”这样的名称。如果你喜欢有几个系列,并且每个系列都有自己的名字,你需要解析你的json和praaper正确的数组结构。
+0

正如我所说的,新手对于这个非常新手来说,所以我不清楚你在#2和#3上说些什么。系列名称,序列号不同,所以Saumil建议的硬编码不可行。有没有什么办法可以将第一个数组元素作为Series名称提取出来,其余的数组元素作为Series? – user3117622

+0

我是否需要在JSon上做一个$ each,然后将第一个元素移至系列名称,将其余元素重新格式化为另一个数组并将其推送至该系列? – user3117622

+0

所以我建议先熟悉javascript –