2013-06-25 48 views
0

我刚开始学习JQuery和Highcharts。我用静态数据创建了一个多Y轴高分布图。我想能够将数据从java传递到系列数据。我该怎么做?我如何让JQuery代码从我的java类中获取数据并将其加载到高图中。以下是我的代码:将Java中的系列数据传递给Y轴Highcharts

// MultiY.js 
$(document).ready(function() { 


    chart1 = new Highcharts.Chart({ 
    chart: { 
     renderTo: 'chart_1', 
     height: 350, 
    }, 
    title: { 
     text: 'Sample Highcharts' 
    }, 
    xAxis: { 
     categories: ['4/28/2013', '4/29/2013', '4/30/2013', '5/1/2013', '5/2/2013', '5/3/2013', '5/4/2013']  
    }, 
    yAxis: [{ 
     opposite: true, 
     title: { 
      text: 'Cost', 
      style: { 
       color: '#dbf400' 
      }    
     }, 
     labels: { 
      style: { 
       color: '#dbf400' 
      } 
     },plotOptions: { 
      series: { 
       pointWidth: 20 
      } 
     } 
    }, 
    { 
     lineWidth: 2, 
     title: { 
      text: 'Silver', 
      style: { 
       color: '#89A54E' 
      } 
     }, 
     labels: { 
      style: { 
       color: '#89A54E' 
      } 
     } 
    }, { 
     lineWidth: 2, 
     opposite: true, 
     title: { 
      text: 'Gold', 
      style: { 
       color: '#4572A7' 
      } 
     }, 
     labels: { 
      style: { 
       color: '#4572A7' 
      } 
     } 
    }, { 
     lineWidth: 2, 
     opposite: true, 
     title: { 
      text: 'Score', 
      style: { 
       color: '#AA4643' 
      } 
     }, 
     labels: { 
      style: { 
       color: '#AA4643' 
      } 
     } 
    }], 

    series: [ { 
     name: 'Cost', 
     type: 'column', 
     color: '#dbf400', 
     data: [65078.70, 70816.51, 71211.22, 56130.71, 67839.10, 59170.91, 52826.47] , 
     yAxis: 3 
    }, { 
     name: 'Silver', 
     type: 'spline', 
     color: '#89A54E', 
     dashStyle: 'shortdot', 
     data: [6357434, 7190915, 6737487, 6001323, 8628154, 7446175, 5953040]   
    }, { 
     name: 'Gold', 
     type: 'spline', 
     color: '#4572A7', 
     data: [2652304, 2862748, 2645867, 2506507, 2531869, 2352410, 2127584] , 
     yAxis: 1 
    }, { 
     name: 'Score', 
     type: 'spline', 
     color: '#AA4643', 
     data: [57994, 68114, 64582, 26526, 52712, 55464, 46802] , 
     yAxis: 2 
    }] 
    }); 

}); 

我的Java函数返回:

trendingData.add(new TrendingDataObjects(silver, gold, score, cost, day)); 
+0

我想你可能会这样做:1)使用AJAX,从jQuery可能是get()或getJSON()。我建议使用第二。 2)在您的Java类添加库导出到JSON,并编码为该格式。 3)将AJAX请求连接到将返回该JSON的URL。 4)要添加新系列,请使用[chart.addSeries](http://api.highcharts.com/highcharts#Chart.addSeries())或为现有系列设置新数据[chart.series.setData](http: //api.highcharts.com/highcharts#Series.setData()) –

+0

我跟随你的建议。我写了一个ajax函数并获得了json数据。我尝试使用以下方法创建系列数据: 'success:function(data){ \t chart.xAxis [0] .setCategories(data.timestamp); ) \t chart.addSeries({“Cost”, data:data.cost \t});' 但现在图表不加载:( – Praveen

+0

data.timestamp应该是一个字符串数组(例如:[['a','b','c']'),data.cost应该是一个点数组(例如:'[123,145,156]')。你确定这是你的JSON格式的数据吗?你可以显示你的JSON数据样本吗? –

回答

1

这为我工作:在document.ready()...之后进行ajax调用,并将图表创建功能放入成功函数中。这样,图表将在启动时加载数据。例如: //一旦DOM(文档)完成加载 $(文件)。就绪(函数(){

$.ajax({ 
    type: "GET", 
    url: "url", 
    dataType: 'json', 
    success: function(data){ 


     var timeArray = data.time; 
     var costArray = data.cost; 


    // First chart initialization 
     chart1 = new Highcharts.Chart({ 
     chart: { 
      renderTo: 'chart_1', 
      height: 350, 
     }, 
     title: { 
      text: 'Ozone Trending' 
     }, 
     xAxis: { 
      categories: timeArray, 
      labels: { 
       rotation: -45, 
       align: 'right' 
      } 
     }, 
     yAxis: [{ 
      opposite: true, 
      title: { 
       text: 'Cost' 

      }, 
      labels: { 
       style: { 
        color: '#dbf400' 
       } 
      },plotOptions: { 
       series: { 
        pointWidth: 20 
       } 
      } 
     }], 

     series: [ { 
      name: 'Cost', 
      data: costArray, 

     }] 
     }); 


    } 

}); 

});

+0

因此,它的工作原理是什么?格拉茨! –

+0

感谢您的输入Pawel – Praveen

0

看一看http://wicked-charts.org。这是一个Java库,提供与您可以创建一个图表选项为你想要的任何数据,像这样Highcharts对象的API:

Options options = new Options(); 
options.setChartOptions(
    new ChartOptions() 
    .setRenderTo("chart_1") 
    .setHeight(350)); 
// set all your other options, including axes and data points 

一旦你有一个适合您的需求,您可以通过Java对象它以一个Wicket或JSD成分(如果你使用这些框架之一 - 看到一个HOWTO的项目主页),或者你可以直接创建图表的这样的JSON表示:

JsonRenderer renderer = new JsonRenderer(); 
String jsonString = renderer.toJson(options); 
+0

wicket在做什么,我已经在我的multiy.js中完成了。就像创建轴和系列一样。我只是想从java类中获取系列数据。我真的没有看到在这里使用检票口的优势。我想更像是从multiy.js调用java函数,并将数据分配给获取的数据。 – Praveen

+0

好的,现在我有你的问题。你想从你的jQuery代码调用服务器上的Java函数,对吧?在这种情况下,您需要一些可以通过HTTP访问的服务器端Java Web应用程序,例如使用jquery ajax(http://api.jquery.com/jQuery.ajax/)来调用它。您可以使用Java框架(如JSP,JSF,Wicket或Spring MVC)构建的Java Web应用程序,例如... – Tom