Reload図データをJSONとHighcharts
-
25-09-2019 - |
質問
うことにより再読み込みのデータをHighcharts図via JSONに基づくボタンをクリックし、他のページです。当初は思表示のデフォルトのデータセット(支出によるカテゴリー)その負荷データに基づくユーザの入力を費や月など)を行います。最も簡単な方法んな出力をJSONサーバーからはを渡すことによって取得要求のPHPのページでは、例えば $.get('/ドアライブます。php?オープン(クラスメソッド)mode=month', 検索からこの値をボタンのID属性。
ここでは私がこれまでに取得するデフォルトのデータ(支出)。必要とするどのように荷重が完全に異なるデータの円グラフに基づき、ユーザー入力は、需要
$(document).ready(function() {
//This is an example of how I would retrieve the value for the button
$(".clickMe").click(function() {
var clickID = $(this).attr("id");
});
var options = {
chart: {
renderTo: 'graph-container',
margin: [10, 175, 40, 40]
},
title: {
text: 'Spending by Category'
},
plotArea: {
shadow: null,
borderWidth: null,
backgroundColor: null
},
tooltip: {
formatter: function() {
return '<b>'+ this.point.name +'</b>: $'+ this.y;
}
},
credits: {
enabled: false
},
plotOptions: {
pie: {
allowPointSelect: true,
cursor: 'pointer',
dataLabels: {
enabled: true,
formatter: function() {
if (this.y > 5) return '$' + this.y;
},
color: 'white',
style: {
font: '13px Trebuchet MS, Verdana, sans-serif'
}
}
}
},
legend: {
layout: 'vertical',
style: {
left: 'auto',
bottom: 'auto',
right: '50px',
top: '100px'
}
},
series: [{
type: 'pie',
name: 'Spending',
data: []
}]
};
$.get('/dough/includes/live-chart.php', function(data) {
var lines = data.split('\n');
$.each(lines, function(lineNo, line) {
var items = line.split(',');
var data = {};
$.each(items, function(itemNo, item) {
if (itemNo === 0) {
data.name = item;
} else {
data.y = parseFloat(item);
}
});
options.series[0].data.push(data);
});
// Create the chart
var chart = new Highcharts.Chart(options);
});
});
のお役に立てるようお願い申し上げます
編集
こちらが更新されたJavascriptコRobodude.ジョンは、私のここに-!後ほど現在決定しているってとこだわったの交換方法を教えてくださデータの図から、AJAXます。私は認めなければならないのコードの$.get()がらのサンプルコードとは思いの全貌を十分に理解していませんかときに実行うが、より良いフォーマットのデータはもらえますか?
たくさを表現負荷の新しいデータが追加されたのは何があります。疑いのある彼は、このライン:
options.series[0].data.push(data);
てみました。シリーズ[0]になります。setData(データ);でも何も起こりません。一方で、明るい側面としては、AJAXの要求正値に基づいて、選択メニューがJavascriptエラー。こちらのコードは、sans図オプション:
$.get('/dough/includes/live-chart.php?mode=cat', function(data) {
var lines = data.split('\n');
$.each(lines, function(lineNo, line) {
var items = line.split(',');
var data = {};
$.each(items, function(itemNo, item) {
if (itemNo === 0) {
data.name = item;
} else {
data.y = parseFloat(item);
}
});
options.series[0].data.push(data);
});
// Create the chart
var chart = new Highcharts.Chart(options);
});
$("#loadChart").click(function() {
var loadChartData = $("#chartCat").val();
$.get('/dough/includes/live-chart.php?mode=' + loadChartData, function(data) {
var lines = data.split('\n');
$.each(lines, function(lineNo, line) {
var items = line.split(',');
var data = {};
$.each(items, function(itemNo, item) {
if (itemNo === 0) {
data.name = item;
} else {
data.y = parseFloat(item);
}
});
options.series[0].data.push(data);
});
// Create the chart
var chart = new Highcharts.Chart(options);
});
});
});
編集2 この形式の図から引-とっても簡単にカテゴリ名および値がその後す。
Coffee, 4.08
Dining Out, 5.05
Dining: ODU, 5.97
Dining: Work, 38.41
Entertainment, 4.14
Gas, 79.65
Groceries, 228.23
Household, 11.21
Misc, 12.20
Snacks, 20.27
解決
EDIT:!ダウン下記のレスポンスがより正確である。
https://stackoverflow.com/a/8408466/387285 の
http://www.highcharts.com/ref/#series-object
HTMLます:
<SELECT id="list">
<OPTION VALUE="A">Data Set A
<OPTION VALUE="B">Data Set B
</SELECT>
<button id="change">Refresh Table</button>
<div id="container" style="height: 400px"></div>
のJavascriptます:
var options = {
chart: {
renderTo: 'container',
defaultSeriesType: 'spline'
},
series: []
};
$("#change").click(function() {
if ($("#list").val() == "A") {
options.series = [{name: 'A', data: [1,2,3,2,1]}]
// $.get('/dough/includes/live-chart.php?mode=month'
} else {
options.series = [{name: 'B', data: [3,2,1,2,3]}]
// $.get('/dough/includes/live-chart.php?mode=newmode'
}
var chart = new Highcharts.Chart(options);
});
これは私が私と一緒にここに私のファイルを持っていませんが、基本的な考え方は、彼らが見てみたいもののためのユーザー選択の新しいオプションたびに、あなたが取り替える必要があるとしているということですので、非常に簡単な例です。シリーズサーバーから新しい情報で、データ・オブジェクトと、新しいHighcharts.Chartを使用してグラフを再作成する();ます。
希望このことができます! ジョン
EDITます:
その私が過去に働いてきた何かから、このアウトをチェックします:
$("table#tblGeneralInfo2 > tbody > tr").each(function (index) {
if (index != 0) {
var chartnumbervalue = parseInt($(this).find("td:last").text());
var charttextvalue = $(this).find("td:first").text();
chartoptions.series[0].data.push([charttextvalue, chartnumbervalue]);
}
});
私は、円グラフに追加する必要があると最初と最後のTDSに情報を持つテーブルを持っていました。値の行の各プッシュスルーIループ。注:円グラフのみ1シリーズを持っているので、私は[0] .dataのchartoptions.seriesを使用する
他のヒント
他の回答は私のために動作しませんでした。私は彼らのドキュメントの答えを見つけます:
http://api.highcharts.com/highcharts#Seriesする
( JSFiddle例を参照)この方法を使用する:
var chart = new Highcharts.Chart({
chart: {
renderTo: 'container'
},
series: [{
data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
}]
});
// the button action
$('#button').click(function() {
chart.series[0].setData([129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4, 29.9, 71.5, 106.4] );
});
あなたは、新しいデータをプッシュする前に古い配列をクリアする必要があり、これを達成する多くの方法があるが、私はこの1つを使用:ます。
options.series[0].data.length = 0;
あなたのコードは次のようになります。ですからます:
options.series[0].data.length = 0;
$.each(lines, function(lineNo, line) {
var items = line.split(',');
var data = {};
$.each(items, function(itemNo, item) {
if (itemNo === 0) {
data.name = item;
} else {
data.y = parseFloat(item);
}
});
options.series[0].data.push(data);
});
ボタンがクリックされたときに今、古いデータが削除され、新しいデータのみが表示されるはずです。希望に役立ちます。
実際には多分あなたは、関数update
を選択する必要がありますが良いです。
ここでは、関数のドキュメントだupdate
http://api.highcharts.com/highcharts#Series.update
あなたは以下のようなコードを入力することができます
chart.series[0].update({data: [1,2,3,4,5]})
これらのコードは、元のオプションをマージし、変更されたデータが更新されます。
正しい答えは次のとおりです。
$.each(lines, function(lineNo, line) {
var items = line.split(',');
var data = {};
$.each(items, function(itemNo, item) {
if (itemNo === 0) {
data.name = item;
} else {
data.y = parseFloat(item);
}
});
options.series[0].data.push(data);
data = {};
});
あなたは、「データ」のアレイをフラッシュする必要があります。
data = {};
の場合 は を押を押し、データのオプションです。シリーズを動的に..使おう
options.series = [];
クリアします。
options.series = [];
$("#change").click(function(){
}
あなたは常にJSONデータをロードすることができます。
ここで私は名前空間としてグラフを定義します。
$.getJSON('data.json', function(data){
Chart.options.series[0].data = data[0].data;
Chart.options.series[1].data = data[1].data;
Chart.options.series[2].data = data[2].data;
var chart = new Highcharts.Chart(Chart.options);
});
data = [150,300]; // data from ajax or any other way
chart.series[0].setData(data, true);
setData
が再描画メソッドを呼び出します。