4

ウェブページにGoogleの折れ線グラフを描きたい!これが私のjsコードです:

function drawVisualization() {
  // Create and populate the data table.
  var data = google.visualization.arrayToDataTable([
    ['x', 'Cats', 'Blanket 1'],
    ['A',   1,       10],
    ['B',   2,       5],
    ['C',   4,       12],
    ['D',   8,       5]
  ]);

  var options = {
      curveType: 'function',
      lineWidth: 2,
      hAxis: {
        baselineColor: 'red', 
        textStyle: {color: '#000', fontName: 'Arial', fontSize: 10}, 
        gridlines: { color: '#f3f3f3', count: 5} 
      },
      vAxis: {
        baseline: 0, 
        viewWindowMode: "explicit", 
        viewWindow:{ min: 0 },
        gridlines: { color: '#f3f3f3', count: 6} 
      }
    };
  new google.visualization.LineChart(document.getElementById('visualization')).
      draw(data, options);
}

ただし、結果のグラフは垂直軸線なしで描画されています。下の画像のように縦軸の線を追加する方法: ここに画像の説明を入力してください ありがとうございます!

4

2 に答える 2

4

グリッド線はカテゴリ軸ではサポートされていません。問題のデータはカテゴリ(X軸ラベル)として文字列を使用しているため、それらをどのように「分割する必要があるか」を判断する方法はありません。ただし、次の方法でこれを回避できます。

秘訣1:データを数値化する

つまり、現在、グリッド線がないことを意味する文字列があります。ただし、グリッド線が必要なので、その小さな問題を修正する必要があります。したがって、最初の列(X)を、その上にマウスを置くと(および凡例で)「A」または「B」または「C」と表示されるようにフォーマットが設定された数値に変換します。

  var data = new google.visualization.DataTable();
  data.addColumn('number', 'x');
  data.addColumn('number', 'Cats');
  data.addColumn('number', 'Blanket 1');
  data.addRows([
    [{v: 1, f:'A'},   1,       10],
    [{v: 2, f:'B'},   2,       5],
    [{v: 3, f:'C'},   4,       12],
    [{v: 4, f:'D'},   8,       5]
  ]);

ただし、これでは問題は解決しません。これで、下の軸に数字が表示され、0.8の奇妙な間隔で切り取られます。だから私たちはそれを修正したいと思います。残念ながら、hAxisを使用すると、最小/最大値を設定して固定することはできません(理由はわかりません)。オプションにbaseline:0を追加することで、最小値を修正できます。

最大値を取得するには、ダミーシリーズを追加する必要があります。

すべてをまとめると、次のようになります。

function drawVisualization() {
  // Create and populate the data table.
  var data = new google.visualization.DataTable();
  data.addColumn('number', 'x');
  data.addColumn('number', 'Cats');
  data.addColumn('number', 'Blanket 1');
  // This dummy series is to extend the chart from 0-5 for padding
  data.addColumn('number', null);
  data.addRows([
    [{v: 1, f:'A'}, 1, 10, null],
    [{v: 2, f:'B'}, 2, 5, null],
    [{v: 3, f:'C'}, 4, 12, null],
    [{v: 4, f:'D'}, 8, 5, null],
    [{v: 5, f:''}, null, null, {v: 0, f:''}]
  ]);

  options = {
    curveType: 'function',
    lineWidth: 2,
    hAxis: {
      // Show a baseline at 0
      baseline: 0,
      // 6 Gridlines, 4 labels + left and right for padding
      gridlines: {
        count: 6
      },
    },
    vAxis: {
      baseline: 0,
    },
    series: [
      {},
      {},
      // Hide our dummy series
      {
        lineWidth: 0,
        pointsize: 0,
        visibleInLegend: false
      },
    ]
  };
  chart1 = new google.visualization.LineChart(document.getElementById('visualization'));
  chart1.draw(data, options);
}

今、それはあなたが望むもののように見えます。2つの主要な問題があります。1つは、グラフの右下にマウスを置くと、空白のツールチップがポップアップすることです(グラフをイベントとインタラクティブにすると、エラートラップを実行する必要があるかもしれませんが、これは大きな問題ではありません)。もう1つは、グラフの下部に文字ではなく数字が表示されていることです。

残念ながら、数字を文字としてフォーマットする簡単な方法はありません(少なくとも、Googleが日付/数字だけでなくICUパターンセット全体を実装するまで)。したがって、別の回避策を作成する必要があります。基本的に、私がしていることは、ラベルを作成するためだけにまったく新しいチャートを作成することです。次に、ラベル以外のすべてが非表示になるようにフォーマットし、上のグラフと水平に並ぶようにします。

  function drawVisualization() {
    // Create and populate the data table.
    var data = new google.visualization.DataTable();
    data.addColumn('number', 'x');
    data.addColumn('number', 'Cats');
    data.addColumn('number', 'Blanket 1');
    // This dummy series is to extend the chart from 0-5 for padding
    data.addColumn('number', null);
    data.addRows([
      [{v: 1, f:'A'}, 1, 10, null],
      [{v: 2, f:'B'}, 2, 5, null],
      [{v: 3, f:'C'}, 4, 12, null],
      [{v: 4, f:'D'}, 8, 5, null],
      [{v: 5, f:''}, null, null, {v: 0, f:''}]
    ]);

    options = {
      curveType: 'function',
      lineWidth: 2,
      hAxis: {
        // Show a baseline at 0
        baseline: 0,
        // 6 Gridlines, 4 labels + left and right for padding
        gridlines: {
          count: 6
        },
        // Hide our labels
        textPosition: 'none'
      },
      vAxis: {
        baseline: 0,
      },
      series: [
        {},
        {},
        // Hide our dummy series
        {
          lineWidth: 0,
          pointsize: 0,
          visibleInLegend: false
        },
      ]
    };

    // Add dummy data for the axis labels
    var data2 = new google.visualization.DataTable();
    data2.addColumn('string', 'x');
    data2.addColumn('number', 'dummy');
    data2.addRows([
      ['A', null],
      ['B', null],
      ['C', null],
      ['D', null]
    ]);

    chart1 = new google.visualization.LineChart(document.getElementById('visualization'));
    chart1.draw(data, options);

    chart2 = new google.visualization.LineChart(document.getElementById('visualization2'));
    chart2.draw(data2,
                {
                  chartArea: {
                    top:0,
                    height:"0%"
                  },
                  min: 0,
                  max: 0,
                  hAxis: {
                    baselineColor: '#FFFFFF'
                  },
                  vAxis: {
                    baselineColor: '#FFFFFF',
                    direction: -1,
                    textPosition: 'none',
                    gridlines: {
                      color: '#FFFFFF'
                    }
                  }
                });
  }

最初のものの下にもう1つ作成し、CSSを使用して適切に位置合わせします(同じ位置などにフロートさせます)。ラベルは上のグラフに属しているように見えます。

それは栄光ではありませんが、機能します。

于 2013-01-11T08:56:50.840 に答える
3

を使用することで、より洗練されたソリューションがありますxticks。これを行うには、次のようなデータテーブルを定義します。

var data = new google.visualization.DataTable();
        data.addColumn('number', 'Month');
        data.addColumn('number', 'Sales');
        data.addRows([
        [{v: 0, f:'Jan'}, 1000],
        [{v: 1, f:'Feb'}, 1170],
        [{v: 2, f:'Mar'}, 660],
        [{v: 3, f:'Apr'}, 1030]
    ]);

数値だけでなく、Month軸の文字列ラベルも設定します。
これとformat属性を削除すると、垂直線が表示されますが、x軸ラベルの文字列の代わりに数字が表示されます。これは必要なものではありません。
これを修正するためxticksに、プロットに正しいラベルを強制するように設定できます。

var options = {
        title: '',
        hAxis: {
            title: 'Month',
            titleTextStyle: {
                color: '#333'
            },
            baseline: 0,
            gridlines: {
                color: '#f3f3f3',
              count: 4
            },
           ticks: [{v: 0, f:'Jan'},{v: 1, f:'Feb'},{v: 2, f:'Mar'},{v: 3, f:'Apr'}], // <------- This does the trick
        },
        vAxis: {
            minValue: 0,
            gridlines: {
                color: '#f3f3f3',
                count: 5
            }
        }
    };

これにより、それがどのように行われるかを示す完全な作業フィドル:http: //jsfiddle.net/j29Pt/417/

于 2016-01-08T09:32:20.103 に答える