2012-04-26 15 views
4

凡例の関連するキーをクリックすると折れ線を表示/非表示できるようにしたいですか?Google Charts - 凡例キーをクリックすると線を非表示にする

1.Create既存のDataTableオブジェクトに基づいて、DataViewオブジェクト:

DataTable dataTable = DataTable.create(); 
DataView dataView = DataView.create(dataTable); 

2.Hideの列を - :次の手順を実行し、あなたのGWTの可視化折れ線グラフで表示する行を非表示にするに

答えて

2

dataView.hideColumns(new int[]{<id_of_the_column>}); 

3.Drawチャート全体が再びデータビューに基づいて:あなたはデータビューで非表示にする曲線/ライン

chart.draw(dataView, getOptions()); 

ここに注意点がありますが、ステップ3は費用のかかるステップです。私たちにとっては20-30秒近くかかります。新しいグラフが描画されるようにします。しかし、データが大きくなければ、それはあなたの文脈で管理可能でなければなりません。

注:ユーザーがチェックボックスをオンにしてチェックボックスをオンまたはオフにすると、上記の操作を行う必要があります。

2

スケーリングとアニメーションを含める必要がない場合は、lineWidthとareaOpacityの値を使用してデータを隠すだけです。

<head> 
    <script type='text/javascript' src='https://www.google.com/jsapi'></script> 

    <script> 
     function updateTable() { 

      // quick data - cleaned up for this example real data sources 
      data = new Array(); 
      data[0] = new Array(); 
      data[0][0] = "Day"; 
      data[0][1] = "Metric 1"; 
      data[0][2] = "Metric 2"; 
      data[0][3] = "Metric 3"; 
      data[1] = new Array(); 
      data[1][0] = 1; 
      data[1][1] = 200; 
      data[1][2] = 50; 
      data[1][3] = 400; 
      data[2] = new Array(); 
      data[2][0] = 2; 
      data[2][1] = 440; 
      data[2][2] = 140; 
      data[2][3] = 40; 
      data[3] = new Array(); 
      data[3][0] = 3; 
      data[3][1] = 300; 
      data[3][2] = 500; 
      data[3][3] = 600; 

      var gdata = google.visualization.arrayToDataTable(data); 

      var options = { 
       // title: 'kala', 
       hAxis: {title: 'Days', titleTextStyle: {color: '#333'}} 
       ,vAxis: {minValue: 0} 
       ,height: 300 
       ,width: 600 
       ,chartArea: {left: 60} 
       ,lineWidth: 2 
       ,series: {0:{color: 'black', areaOpacity: 0.3, lineWidth: 2} 
       ,1:{color: 'red', areaOpacity: 0.3, lineWidth: 2} 
       ,2:{color: 'purple', areaOpacity: 0.3, lineWidth: 2}} 
      }; 

      var chart = new google.visualization.AreaChart(document.getElementById('my_chart')); 
      chart.draw(gdata, options); 

      google.visualization.events.addListener(chart, 
       'select', 
       (function (x) { return function() { AreaSelectHander(chart, gdata, options)}})(1)); 

    } 

    function AreaSelectHander(chart, gdata, options) { 
     // when ever clicked we enter here 
     // more code needed to inspect what actually was clicked, now assuming people 
     // play nicely and click only lables... 
     var selection = chart.getSelection();  
     var view = new google.visualization.DataView(gdata); 
     console.log(options); 

     // click and data index are one off 
     i = selection[0].column - 1; 

     // just simple reverse 
     if (options.series[i].lineWidth == 0) { 
      options.series[i].lineWidth = 2; 
      options.series[i].areaOpacity = 0.3; 
     } 
     else { 
      options.series[i].lineWidth = 0; 
      options.series[i].areaOpacity = 0.0;    
     } 

     chart.draw(gdata, options); 
    } 
    </script> 

    <script type='text/javascript'> 
     google.load('visualization', '1', {packages:['table', 'corechart']}); 
     google.setOnLoadCallback(updateTable); 
    </script> 

</head> 

<body> 
    <div id='my_chart'></div> 
</body> 

0

コード表示ゴーグル折れ線グラフに従い、凡例のラベルをクリックすることで非表示にする機能/ショーグラフの線を持っています。 #graph_sales_dataは、グラフを表示するdivのIDで、sales_data_graphは可変レコードです。

function drawChart() { 
         if (sales_data_graph.length > 1) 
         { 
          $('#graph_sales_data').show(); 
          var data = new google.visualization.arrayToDataTable(sales_data_graph); 

          // Instantiate and draw our chart, passing in some options. 
          var chart = new google.visualization.ChartWrapper({ 
           chartType: 'LineChart', 
           containerId: 'graph_sales_data', 
           dataTable: data, 
           colors: ['#ea6f09', '#fb250d', '#0ac9c6', '#2680be', '#575bee', '#6bd962', '#ff0000', '#000000'], 
           options: { 
            width: 1200, 
            height: 500, 
            fontSize: 10, 
            pointSize: 10 
           } 
          }); 

          // create columns array 
          var columns = [0]; 
          /* the series map is an array of data series 
          * "column" is the index of the data column to use for the series 
          * "roleColumns" is an array of column indices corresponding to columns with roles that are associated with this data series 
          * "display" is a boolean, set to true to make the series visible on the initial draw 
          */ 
          var seriesMap = [{ 
            column: 1, 
            roleColumns: [1], 
            display: true 
           }, { 
            column: 2, 
            roleColumns: [2], 
            display: true 
           }, { 
            column: 3, 
            roleColumns: [3], 
            display: true 
           }, { 
            column: 4, 
            roleColumns: [4], 
            display: true 
           }, { 
            column: 5, 
            roleColumns: [5], 
            display: true 
           }, { 
            column: 6, 
            roleColumns: [6], 
            display: true 
           }, { 
            column: 7, 
            roleColumns: [7], 
            display: true 
           }, { 
            column: 8, 
            roleColumns: [8], 
            display: true 
           }]; 
          var columnsMap = {}; 
          var series = []; 
          for (var i = 0; i < seriesMap.length; i++) { 
           var col = seriesMap[i].column; 
           columnsMap[col] = i; 
           // set the default series option 
           series[i] = {}; 
           if (seriesMap[i].display) { 
            // if the column is the domain column or in the default list, display the series 
            columns.push(col); 
           } 
           else { 
            // otherwise, hide it 
            columns.push({ 
             label: data.getColumnLabel(col), 
             type: data.getColumnType(col), 
             sourceColumn: col, 
             calc: function() { 
              return null; 
             } 
            }); 
            // backup the default color (if set) 
            if (typeof(series[i].color) !== 'undefined') { 
             series[i].backupColor = series[i].color; 
            } 
            series[i].color = '#CCCCCC'; 
           } 
           for (var j = 0; j < seriesMap[i].roleColumns.length; j++) { 
            //columns.push(seriesMap[i].roleColumns[j]); 
           } 
          } 

          chart.setOption('series', series); 

          function showHideSeries() { 
           var sel = chart.getChart().getSelection(); 
           // if selection length is 0, we deselected an element 
           if (sel.length > 0) { 
            // if row is undefined, we clicked on the legend 
            if (sel[0].row == null) { 
             var col = sel[0].column; 
             if (typeof(columns[col]) == 'number') { 
              var src = columns[col]; 

              // hide the data series 
              columns[col] = { 
               label: data.getColumnLabel(src), 
               type: data.getColumnType(src), 
               sourceColumn: src, 
               calc: function() { 
                return null; 
               } 
              }; 

              // grey out the legend entry 
              series[columnsMap[src]].color = '#CCCCCC'; 
             } 
             else { 
              var src = columns[col].sourceColumn; 

              // show the data series 
              columns[col] = src; 
              series[columnsMap[src]].color = null; 
             } 
             var view = chart.getView() || {}; 
             view.columns = columns; 
             chart.setView(view); 
             chart.draw(); 
            } 
           } 
          } 

          google.visualization.events.addListener(chart, 'select', showHideSeries); 

          // create a view with the default columns 
          var view = { 
           columns: columns 
          }; 
          chart.draw(); 
         } 
         else 
         { 
          $('#graph_sales_data').hide(); 
         } 
        } 
関連する問題