2016-03-20 9 views
1

私は、2つの線を示す折れ線グラフを持っています:1つは値のある日付範囲を表し、もう1つの線は前の値との前の期間(日付も)です。グーグルラインチャート複数の列データを持つツールヒント

各行のツールヒントに関連する日付と値を表示します。

ツールチップは、次のようになります。

function drawChart(chartData, elemId, chartWidth, chartHeight, startDate, endDate) { 
    var chartToDraw = new google.visualization.DataTable(); 
    chartToDraw.addColumn('date', 'Date'); 
    chartToDraw.addColumn('number', 'Value'); 
    chartToDraw.addColumn({ 
     type: 'string', 
     role: 'tooltip', 
     properties: { 
      html: true 
     }, 
     calc: function (dt, row) { //doesn't get called for some reason 
      var date = dt.getValue(row, 2); 
      var val = dt.getValue(row, 1); 
      return '<div>' + date + ' </br><b>value:</b>' + val + '</div>'; 
     } 
    }); 
    chartToDraw.addColumn('number', 'Previous value'); 
    chartToDraw.addColumn({ 
     type: 'string', 
     role: 'tooltip', 
     properties: { 
      html: true 
     }, 
     calc: function (dt, row) { //doesn't get called for some reason 
      var date = dt.getValue(row, 4); 
      var val = dt.getValue(row, 3); 
      return '<div>' + date + ' </br><b>value:</b>' + val + '</div>'; 
      } 
     }); 

     if (chartData['dataPoints'] != undefined) { 
      var currentDataArr = []; 
      for (var point in chartData['dataPoints']) { 
       currentDataArr.push([ 
        chartData['dataPoints'][point].date, 
        chartData['dataPoints'][point].value, 
        chartData['dataPoints'][point].date, 
        chartData['dataPoints'][point].prevValue, 
        chartData['dataPoints'][point].prevDate 
       ]); 
      } 
     } 
     chartToDraw.addRows(currentDataArr); 



    var timeFormatter = new google.visualization.DateFormat({ 
     pattern: "MMM dd" 
    }); 
    timeFormatter.format(chartToDraw, 0); 
    timeFormatter.format(chartToDraw, 2); 
    timeFormatter.format(chartToDraw, 4); 

    var options = { 
     legend: 'none', 
     'width': chartWidth, 
     'height': chartHeight, 
     pointSize: 4, 
     colors: ['#0289cb', '#01af8a'], 
     tooltip: { 
      isHtml: true 
     }, 
     chartArea: { 
      width: '80%' 
     }, 
     hAxis: { 
      slantedText: true, 
      slantedTextAngle: 30, 
      viewWindow: { 
       min: startDate, 
       max: endDate 
      }, 
      gridlines: { 
       count: -1, 
       units: { 
        days: {format: ['MMM dd']}, 
        hours: {format: ['HH:mm', 'ha']} 
       } 
      }, 
      minorGridlines: { 
       units: { 
        hours: {format: ['hh:mm:ss a', 'ha']}, 
        minutes: {format: ['HH:mm a Z', ':mm']} 
       } 
      } 
     }, 
     vAxis: { 
      viewWindow: { 
       min: 0 
      } 
     } 
    }; 

    var chart = new google.visualization.LineChart(document.getElementById(elemId)); 
    chart.draw(chartToDraw, options); 
} 

問題はすべて、私はツール - 右今見ていることである。

enter image description here

これは私が今持っているものですヒントはちょうど正しい日付であり、私は価値を見逃しています。 ツールチップのタイプをstringに変更すると、calcが呼び出されない理由が分かりません。mismatch typeというエラーが表示されます。

Google Chart HTML Tooltip displays html text

Add tooltips to a Google Line Chart with multiple data series - with simplified test case and screenshot

が、私はそれらの答えをresambleするために行ったすべての変更に失敗しました:ここに

は、私がこれまで見てきたものです。 何が間違っていますか?列のみDataView Class
ないDataTable Class ...

、あなたのツールチップを追加するのDataView
使用setColumnsを作成し、あなたのDataTable最初のロード、使用するにして働く計算

答えて

1

...

質問から、それはこのように見えるかもしれません...

var chartToDraw = new google.visualization.DataTable(); 
chartToDraw.addColumn('date', 'Date'); 
chartToDraw.addColumn('number', 'Value'); 
chartToDraw.addColumn('number', 'Previous value'); 
chartToDraw.addColumn('date', 'Previous Date'); 

if (chartData['dataPoints'] != undefined) { 
    var currentDataArr = []; 
    for (var point in chartData['dataPoints']) { 
     currentDataArr.push([ 
      chartData['dataPoints'][point].date, 
      chartData['dataPoints'][point].value, 
      chartData['dataPoints'][point].prevValue, 
      chartData['dataPoints'][point].prevDate 
     ]); 
    } 
} 
chartToDraw.addRows(currentDataArr); 

// create view over data, set columns 
var dataView = new google.visualization.DataView(chartToDraw); 
dataView.setColumns([0, 1, 
    { 
    type: 'string', 
    role: 'tooltip', 
    properties: { 
     html: true 
    }, 
    calc: function (dt, row) { 
     var date = dt.getValue(row, 0); 
     var val = dt.getValue(row, 1); 
     return '<div>' + date + ' </br><b>value:</b>' + val + '</div>'; 
    } 
    }, 
    2, 
    { 
    type: 'string', 
    role: 'tooltip', 
    properties: { 
     html: true 
    }, 
    calc: function (dt, row) { 
     var date = dt.getValue(row, 3); 
     var val = dt.getValue(row, 2); 
     return '<div>' + date + ' </br><b>value:</b>' + val + '</div>'; 
    } 
    } 
]); 
+0

ありがとう! 2番目のツールチップの '2 'の後に' 3'を追加し、 'var date = dt.getValue(')に変更しました。行、3); '、しかし、私はエラーが発生している:'与えられた軸上のすべてのシリーズは、同じデータ型でなければならない '任意のアイデアを解決するには? – FireBrand

+0

はい、2番目の日付は物事を投げつけています。データに2つの日付を含める場合は、2つの軸を使用する必要があります。前の日付を使用して2番目の軸に前の値をプロットしますか?または、現在の日付の軸に前の値をプロットし、ツールチップに前の日付のみを表示しますか?後者の場合、データテーブルに前の日付を追加し、データビューに独自の列を含めず、単にツールチップで参照してください...(編集を参照) – WhiteHat

+0

私は現在の日付の軸に前の値をプロットし、あなたがしたようにデータを追加し、データビューから '3'を削除し、ちょうどツールチップのリファレンスを使用しましたが、私は前と同じエラーが発生します – FireBrand

関連する問題