2011-07-04 5 views
2

私は、折れ線グラフを動的に更新する必要があるウェブサイトを構築しています。私は完全に彼らのウェブサイトで入手でき、この例に基づいて、私はこれを達成するために必要な必要なグラフ作成機能を提供道場ライブラリを使用しています。このため :指定されたxとyの値を使用して動的Dojoチャートを更新する

http://dojotoolkit.org/documentation/tutorials/1.6/charting_advanced/ 
http://dojotoolkit.org/documentation/tutorials/1.6/charting_advanced/demo/store-series.html 

この例では、Aとグラフを更新する方法私を見ますyの新しい値を返し、xの値を1だけインクリメントします。 私が必要とするのは、グラフをカスタム値(x、y)で更新してプロットすることですが、これを行う方法は見つけられません。 は、私が直接ノー結果データ・ストアではなくて、xとyの値を強制しようとした、チャートがロードされません。

  // Initial data 
      var data = [ 
       // This information, presumably, would come from a database or web service 
       { id: 1, x:0, y:20, site: 1 }, 
       { id: 2, value: 16, site: 1 }, 
       { id: 3, value: 11, site: 1 }, 
       { id: 4, value: 18, site: 1 }, 
       { id: 5, value: 26, site: 1 }, 
       { id: 6, value: 19, site: 2 }, 
       { id: 7, value: 20, site: 2 }, 
       { id: 8, value: 28, site: 2 }, 
       { id: 9, value: 12, site: 2 }, 
       { id: 10, value: 4, site: 2 } 
      ]; 


      // Create the data store 
      // Store information in a data store on the client side 
      var store = dojo.store.Observable(new dojo.store.Memory({ 
       data: { 
        identifier: "id", 
        label: "Users Online", 
        items: data 
       } 
      })); 

Googleははるかに私を助けていませんでした。 このデータストアをカスタム(x、y)値のペアで動的に更新するにはどうすればよいですか? これを行う他の方法はありますか?

よろしく

答えて

0

は、あなたがテキスト入力を使用して(x、y)の値の一部を変更することとしましょう。解決方法は簡単です(あなたの質問を理解した場合):

dojo.connect(dijit.byId("someInputElement"), "onChange", 
       function(){ 
          chart.updateSeries("bla bla", new_data).render(); 
          //new data is the data store with custom(x,y) 
          }); 

希望すると助かります!

0

これは少し長くなると思います。私は7年遅れていることを知っていますが、動的に更新されるグラフを作成するためのコードはここにあります。

var start=1; 
     var end=10; 
     require([ 
      'dojo/on', 
      'dojo', 
      'dojo/ready', 
      // Require the basic chart class 
      "dojox/charting/Chart", 
      // Require the theme of our choosing 
      "dojox/charting/themes/MiamiNice", 
      //  We want to plot Columns 
      "dojox/charting/plot2d/Columns", 
      // Require the highlighter 
      "dojox/charting/action2d/Highlight", 
      "dojo/store/Observable", 
      "dojo/store/Memory", 
      'dojox/charting/StoreSeries', 
      // We want to use Markers 
      "dojox/charting/plot2d/Markers", 
      // We'll use default x/y axes 
      "dojox/charting/axis2d/Default", 
      // Wait until the DOM is ready 
      "dojo/domReady!", 
      "dojo/dom" 
     ], function(on, dojo, ready, Chart, theme, ColumnsPlot, Highlight, ObservableStore, MemoryStore, StoreSeries) { 
      ready(function() { 
      // Define the data 
      var data = [ 
      // This information, presumably, would come from a database or web service 
      // Just hardcoded data for now.. Site is set to 2 when we want to hide an element 
      { id: 1, value: 20, site: 1 }, 
      { id: 2, value: 16, site: 1 }, 
      { id: 3, value: 11, site: 1 }, 
      { id: 4, value: 18, site: 1 }, 
      { id: 5, value: 26, site: 1 }, 
      { id: 6, value: 19, site: 1 }, 
      { id: 7, value: 20, site: 1 }, 
      { id: 8, value: 28, site: 1 }, 
      { id: 9, value: 12, site: 1 }, 
      { id: 10, value: 4, site: 1 } 
      ]; 

      // Create the data store 
      // Store information in a data store on the client side 
      var store = new ObservableStore(new MemoryStore({ 
      data: { 
      idProperty: "id", 
      label: "Users Online", 
      items: data 
      } 
      })); 
      // Create the chart within it's "holding" node 
      var chart = new Chart("chartNode",{ 
      title: "Random Data(Sliding)", 
      titlePos: "top", 
      titleGap: 25, 
      titleFont: "normal normal normal 15pt Arial", 
      titleFontColor: "orange" 
      }); 
      // Set the theme 
      chart.setTheme(theme); 
      // Add the only/default plot 
      chart.addPlot("default", { 
       type: ColumnsPlot, 
       markers: true, 
       gap: 5 
      }); 
      // Add axes. We recreated x axis every time the user slides to change the values 
      chart.addAxis("x", {fixLower: "minor", fixUpper: "minor", natural: false, 
        font: "normal normal 10pt Arial", 
       labels: [{value: 1, text: start}, 
        {value: 2, text: start+1}, 
        {value: 3, text: start+2}, 
        {value: 4, text: start+3}, 
        {value: 5, text: start+4}, 
        {value: 6, text: start+5}, 
        {value: 7, text: start+6}, 
        {value: 8, text: start+7}, 
        {value: 9, text: start+8}, 
        {value: 10, text: start+9}, 
       ] 
      }); 
      chart.addAxis("y", { vertical: true, fixLower: "major", fixUpper: "major" }); 
      // Add the series of data 
      chart.addSeries("y", new StoreSeries(store, { query: { site: 1 }, sort: { attribute: "id", ascending: true} }, "value")); 
      // Highlight! 
      new Highlight(chart,"default"); 
      // Render the chart! 
      chart.render(); 
      // Forward button to slide forward adding a random item to the chart 
      var forButton = dojo.byId("forward-btn"); 
      on (forButton, "click", function(evt){ 
      // console.log(start + ' ' + end); 
      end += 1; 
      var item = { 
       id: end, 
       value: Math.floor((Math.random() * 16) + 1), 
       site: 1 
      } 
      //hide starting element 
      store.put({id: start,value: store.get(start).value,site: 2}, {overwrite: true}); 
      start+=1; 
      //put the new value at the end of the store 
      store.put(item, {overwrite: true}); 
      //recreated x axis 
      chart.addAxis("x", {fixLower: "minor", fixUpper: "minor", natural: false, 
        font: "normal normal 10pt Arial", 
       labels: [{value: 1, text: start}, 
        {value: 2, text: start+1}, 
        {value: 3, text: start+2}, 
        {value: 4, text: start+3}, 
        {value: 5, text: start+4}, 
        {value: 6, text: start+5}, 
        {value: 7, text: start+6}, 
        {value: 8, text: start+7}, 
        {value: 9, text: start+8}, 
        {value: 10, text: start+9}, 
       ] 
      }); 
     } 

      ); 
      //backButton to slide back towards the start. Same as forward, but reversing the effects 
      var backButton = dojo.byId("backward-btn"); 
      on (backButton, "click", function(evt){  
       if(start>1){ 
       start-=1; 
       end-=1; 
       // console.log(start + ' ' + end); 
       store.put({id: start,value: store.get(start).value,site: 1}, {overwrite: true}); 
       store.put({id: end+1, value: store.get(end+1).value, site: 2}, {overwrite: true}); 
       store.query({site: 1},{sort: [{attribute: "id", ascending: true}]}).forEach(function(newItem){ 
        store.remove(newItem.id); 
        store.add(newItem); 
        // console.log(newItem); 
       }) 
       chart.addAxis("x", {fixLower: "minor", fixUpper: "minor", natural: false, 
        font: "normal normal 10pt Arial", 
       labels: [{value: 1, text: start}, 
        {value: 2, text: start+1}, 
        {value: 3, text: start+2}, 
        {value: 4, text: start+3}, 
        {value: 5, text: start+4}, 
        {value: 6, text: start+5}, 
        {value: 7, text: start+6}, 
        {value: 8, text: start+7}, 
        {value: 9, text: start+8}, 
        {value: 10, text: start+9}, 
       ] 
      }); 
       } 
       else{ 
        //And a simple alert to inform the user that he can not go backwards anymore 
        alert('You hit the start of the data!'); 
       } 
     } 
      ); 
      }); 
     }); 

とhtmlには、ボタン要素で説明したidの2つのボタンとチャートを実装するchartNodeがあります。誰かがそれを必要とするなら、私はdojoConfigを置くこともできますが、私はチュートリアルから得たので、大きな知識はそこに隠されていません。

関連する問題