2

arrayToDataTableの Google チャートのドキュメントに従っています。この例では、次のようにフォーマットされた値を使用できると述べています。

var data = google.visualization.arrayToDataTable([
['Employee Name', 'Salary'],
['Mike', {v:22500, f:'18,500'}],
...

f :'18,500は、表示する書式設定された値です。私のコードは同じように見えます:

var data = google.visualization.arrayToDataTable([
['Category', 'Amount'],
['Food', {v:5595.819984, f:'5.595,82'}], 
['Home', {v:1890.530002, f:'1.890,53'}], 
['Mail', {v:8.380000, f:'8,38'}], 
['Train', {v:564.899998, f:'564,90'}], 
['Photo', {v:959.119995, f:'959,12'}], 
['Lego', {v:428.760004, f:'428,76'}], 
...

しかし、チャートは表示されず、クラッシュします。フォーマットされたデータを取り出すと、完全に機能します。私が間違っていることは何ですか?見栄えの良いバージョンを使用してグラフに値を表示するにはどうすればよいですか?

4

2 に答える 2

4

Andrew のコメントで述べたように、Google Docs はこれに基づいているようです。

ArrayToDataTable()配列を渡す場合にうまく機能します。追加のフォーマットを追加すると、配列内に配列が作成されるため、Google はそれを好まないようです。フォーマットを使用する場合は、次のように手動でデータを追加する必要があります。

あなたのコード:

var data = google.visualization.arrayToDataTable([
['Category', 'Amount'],
['Food', {v:5595.819984, f:'5.595,82'}], 
['Home', {v:1890.530002, f:'1.890,53'}], 
['Mail', {v:8.380000, f:'8,38'}], 
['Train', {v:564.899998, f:'564,90'}], 
['Photo', {v:959.119995, f:'959,12'}], 
['Lego', {v:428.760004, f:'428,76'}], 

更新されたコード:

var data = google.visualization.DataTable();
data.addColumn('string', 'Category');
data.addColumn('number', 'Amount');
data.addRows([
['Food', {v:5595.819984, f:'5.595,82'}], 
['Home', {v:1890.530002, f:'1.890,53'}], 
['Mail', {v:8.380000, f:'8,38'}], 
['Train', {v:564.899998, f:'564,90'}], 
['Photo', {v:959.119995, f:'959,12'}], 
['Lego', {v:428.760004, f:'428,76'}],
]);

これにより、データの追加が過度に複雑になることはなく、同じ結果で終了し、フォーマットされた値でより適切に再生されます。

于 2013-02-12T02:53:34.940 に答える
1

私もこの問題に遭遇しましたが、データを手動で追加することに満足していませんでした。掘り下げた後、「PatternFormat」メソッドを発見しました: https://developers.google.com/chart/interactive/docs/reference#patternformatter

これにより、配列オブジェクトで書式設定パターンを使用して arrayToDataTable メソッドでテーブルをインスタンス化することはできませんが、値だけを含めてから、列で PatternFormat メソッドを使用して目的の出力に変更することができます。

次のようなものです:

var data = google.visualization.arrayToDataTable([
 ['Category', 'Amount'],
 ['Food', 5595.819984], 
 ['Home', 1890.530002], 
 ['Mail', 8.380000], 
 ['Train', 564.899998], 
 ['Photo', 959.119995}], 
 ['Lego', 428.760004}]
], false); //must specify 'false' to indicate first set is column header data

var formatter = new google.visualization.NumberFormat(
{pattern:'####.##'}
);

formatter.format(data, 1); // Apply formatter to second column

各行に求められる一貫した形式がないため、この手法は実際には上記の元のユースケースでは完全に機能しないことに注意してください。

于 2016-10-25T21:56:08.057 に答える