从 hashmap 获取数据到 highcharts
get data from hashmap into highcharts
我是 angular 和图表的新手,所以我选择使用 highcharts,我有这项服务 return 一个散列图,我想将值放入我想要的垂直条中,所以替换静态数据与来自服务的动态数据使用这种方式:
chart = new Chart({
chart: {
type: 'column'
},
title: {
text: 'errors'
},
credits: {
enabled: false
},
series: [{
name: 'Population',
data: this.data,
}]
})
这是我在 ngOnInit 中的服务:
this.dashboardHttpService.exceptionsByMicroseviceDaily().subscribe(success=> {
this.data=Object(success);
console.log(this.data);
})
我没有得到结果,请问高图表的垂直条如何与 hashmap 一起工作
编辑:
这是 console.log(this.data)
呈现的内容:
{超时:180,客户端处理程序:307,传输:199,未知主机:127,反射:140}
客户端处理程序:307
Reflections:140
Timeout:180
Transport:199
UnknownHost:127
这就是我放在 html 页面上的内容:
dashboard.component.html
<div class="content"> <div [chart]="chart"></div>
一切都适用于静态数据,因此没有依赖性或配置丢失或类似情况。
图表不起作用的原因是,当您将动态 this.data
分配给图表时,您的 series
将如下所示:
series: [{
name: 'Population',
data: [Timeout: 180, ClientHandler: 307, Transport: 199, UnknownHost: 127, Reflections: 140]
}]
series
的格式不正确。格式应为以下两种格式之一:
将所有数据点绘制为一个
series [{ name: 'Population', data:[180, 307, 199, 127, 140] }]
将所有数据点按名称绘制成一个系列
series [{ name: 'Timeout', data: [180] }, { name: 'ClientHandler', data: [307] }, { ... }]
因此,您需要编写一个循环,将响应分为上述格式之一。看到你的图表结构,我认为你正在寻找第二种方法。
我做了一个简单的 for-loop
,它从对象中提取数据用于演示目的:
var testdata = {Timeout: 180, ClientHandler: 307, Transport: 199, UnknownHost: 127, Reflections: 140}
var chartdata = []
var i = 0;
Object.keys(testdata).forEach(function(key) {
chartdata[i++] = {name: key, data: [testdata[key]]};
});
在这个循环之后,chartdata
看起来像:
[{ name: 'Timeout', data: [180] }, { name: 'ClientHandler', data: [307] }, { ... }]
剩下的就是更改代码 series
以接受 chartdata
作为整个系列对象:
series: chartdata
图表会起作用。
Here 你可以找到一个非常简单的 JSFiddle 来展示这个。
我是 angular 和图表的新手,所以我选择使用 highcharts,我有这项服务 return 一个散列图,我想将值放入我想要的垂直条中,所以替换静态数据与来自服务的动态数据使用这种方式:
chart = new Chart({
chart: {
type: 'column'
},
title: {
text: 'errors'
},
credits: {
enabled: false
},
series: [{
name: 'Population',
data: this.data,
}]
})
这是我在 ngOnInit 中的服务:
this.dashboardHttpService.exceptionsByMicroseviceDaily().subscribe(success=> {
this.data=Object(success);
console.log(this.data);
})
我没有得到结果,请问高图表的垂直条如何与 hashmap 一起工作
编辑:
这是 console.log(this.data)
呈现的内容:
{超时:180,客户端处理程序:307,传输:199,未知主机:127,反射:140}
客户端处理程序:307
Reflections:140
Timeout:180
Transport:199
UnknownHost:127
这就是我放在 html 页面上的内容:
dashboard.component.html
<div class="content"> <div [chart]="chart"></div>
一切都适用于静态数据,因此没有依赖性或配置丢失或类似情况。
图表不起作用的原因是,当您将动态 this.data
分配给图表时,您的 series
将如下所示:
series: [{
name: 'Population',
data: [Timeout: 180, ClientHandler: 307, Transport: 199, UnknownHost: 127, Reflections: 140]
}]
series
的格式不正确。格式应为以下两种格式之一:
将所有数据点绘制为一个
series [{ name: 'Population', data:[180, 307, 199, 127, 140] }]
将所有数据点按名称绘制成一个系列
series [{ name: 'Timeout', data: [180] }, { name: 'ClientHandler', data: [307] }, { ... }]
因此,您需要编写一个循环,将响应分为上述格式之一。看到你的图表结构,我认为你正在寻找第二种方法。
我做了一个简单的 for-loop
,它从对象中提取数据用于演示目的:
var testdata = {Timeout: 180, ClientHandler: 307, Transport: 199, UnknownHost: 127, Reflections: 140}
var chartdata = []
var i = 0;
Object.keys(testdata).forEach(function(key) {
chartdata[i++] = {name: key, data: [testdata[key]]};
});
在这个循环之后,chartdata
看起来像:
[{ name: 'Timeout', data: [180] }, { name: 'ClientHandler', data: [307] }, { ... }]
剩下的就是更改代码 series
以接受 chartdata
作为整个系列对象:
series: chartdata
图表会起作用。
Here 你可以找到一个非常简单的 JSFiddle 来展示这个。