显示多个具有相同源javascript(map(key,value))数据的图表
Display many charts with data of the same source javascript ( map (key,value) )
我有一张形式的地图
Object{485:Array[4],2072:Array[4],9665:Array[3]...}
我想为每个键显示一个图表。
我有一个与我想要的类似的例子,我试图在许多图表中显示我的值:在这个例子中,我的密钥是:car_id
第一步:对我的数组进行排序,得到一张带有键的地图。它运行良好。但第二个不起作用。。。我想根据car_id和每个面板的引导程序显示每个数据的图表。。。我做错了什么?
谢谢
<html >
<head>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.5/angular.min.js"></script>
</head>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">
<!-- Latest compiled and minified JavaScript --><script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.2/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.1.0/Chart.min.js"></script>
<script src=" https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.1.0/Chart.min.js"></script>
<body >
<div >
<div class="panel panel-default">
<div class="panel-heading">Panel heading without title</div>
<div class="panel-body">
<canvas id="myChart" width="400" height="400"></canvas>
</div>
</div>
</div>
</body>
<script>var json = {
'cars': [{
"car_id": "1",
"price": "925",
"full_option": "EEEE"
}, {
"car_id": "1",
"price": "990",
"full_option": "DDDDD"
}, {
"car_id": "2",
"price": "500",
"full_option": "FFF"
}, {
"car_id": "2",
"price": "900",
"full_option": "GGGGGGG"
}, {
"car_id": "4",
"price": "900",
"full_option": "JJJ"
}]
};
var car_array = json.cars.reduce((prev, t, index, arr) => {
if (typeof prev[t.car_id] === 'undefined') {
prev[t.car_id] = [];
}
prev[t.car_id].push(t);
return prev;
}, {});
Object.keys(car_array).forEach(i => {
var array_of_cars_with_same_id = car_array[i];
for (var i=0; i<=array_of_cars_with_same_id.length-1;i++){
console.log(array_of_cars_with_same_id[i].price);
var ctx = document.getElementById("myChart");
var myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: [array_of_cars_with_same_id[i].full_option],
datasets: [{
label: '# of Votes',
data: [array_of_cars_with_same_id[i].price]
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero:true
}
}]
}
}
});
}
console.log("AAAAAAAAAAAAA");
});
</script>
您的代码有几个问题。
首先,您只使用一个canvas
元素。每个图表都需要自己的画布元素。正因为如此,您添加的每个图表都只是在上一个图表的顶部进行渲染。
至少,你必须给每个项目一个新的画布。您可以更改代码来实现这一点。
将图表的根元素更改为基本的<div>
元素,以便将图表附加到该元素。
<div class="panel-body">
<div id="chart-holder"></div>
</div>
我会创建一个变量来保存cart计数和根元素。
var chart_holder = $('#chart-holder');
var chart_count = 0;
更改for loop
以使用这些新变量。
for (var i = 0; i <= car_type.length - 1; i++) {
chart_holder.append('<canvas id="myChart' + chart_count + '" width="400" height="400"></canvas>')
var ctx = $("#myChart" + chart_count);
var data = [];
var myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: [car_type[i].full_option],
datasets: [{
label: '# of Votes',
data: [car_type[i].price]
}]
},
options: chart_opts
});
chart_count++;
}
这将为每个数组中的每个对象创建一个新的图表。我制作了一把小提琴来演示。
然而,根据这些数据,我建议采用不同的方法。我会为每个唯一的键创建一个单独的图表,而不是为每个元素创建一个图表。
您需要解析每个数组来提取每个图表的标签和数据。下面是一个从每个数组中获取数据的示例。有一个变量用于捕获图表的数据和图表的标签。
var car_data = [], car_labels = [];
for (var i = 0; i <= car_type.length - 1; i++) {
car_data.push(car_type[i].price);
car_labels.push(car_type[i].full_option);
}
我们可以将car_data
和car_labels
传递给Chart.js初始化。
var myChart = new Chart(ctx, {
type: 'bar',
data: {
labels: car_labels,
datasets: [{
label: 'Car Type ' + ct,
data: car_data
}]
},
options: chart_opts
});
这里有一个小提琴来演示每个car_id的单个图表。
相关文章:
- 用程序搜索JQuery数据表中的文本
- 要求输入在数据列表中
- 正在将数据主题添加到所有项目
- 函数参数中的数据与指定变量之间的任何性能差异
- 显示多个具有相同源javascript(map(key,value))数据的图表
- 信息没有'点击AngularJS中的链接后不会刷新.I'我得到了{{value}},但没有得到数据
- 使用 orderByChild(“column”), equalTo(“value”),不返回任何数据
- 在将数据呈现为类型化建议之前,使用{{value}}上的函数
- 如何将数据传递给输入VALUE
- 获取value中的数据属性
- AngularJs指令:value from cookie不适用于数据绑定
- 提交时,JSON数据返回:"Cannot read property 'value'undef
- 数据表传递一个带有key:value对象的js数组
- 使用value从JSON对象中获取数据
- 数据搜索innerHTML而不是value
- ng-options中的Value属性不是正确的数据类型
- 从Cloudant获取所有文档数据,而不是id, key, value
- 如何从这个数据结构中推送和弹出值:var x = [{value: 30, color: "red"
- 如何在我的href = "Home/CompletedGrid发送数据?Value = ?????"
- 如何使用变量设置 AJAX 数据$key和$value