ECharts 刷新数据变化
ECharts refresh on data change
我目前正在制作一个交互式图表,该图表应计算商业项目的潜在风险因素。为此,我一直在使用百度 ECharts,并使图表可视化工作,但无法在数据更改时更新图表。
数据来自外部问卷,它使用单选按钮作为值,并使用复选框打开和关闭整个集合。
<input type="checkbox" id="GPEbool" value="true"> Example Question 1</h4>
<form action="">
<input type="radio" id="polishedness" value="1"> Idea<br>
<input type="radio" id="polishedness" value="1"> Concept<br>
<input type="radio" id="polishedness" value="2"> Mockup<br>
<input type="radio" id="polishedness" value="5"> Prototype<br>
<input type="radio" id="polishedness" value="7"> Playable<br>
<input type="radio" id="polishedness" value="15"> Polish<br>
<input type="radio" id="polishedness" value="30"> Finished<br>
</form>
现在,问题是将数据放入图表中。它获得了最初选择的值(当向其中一个添加 "checked" 时),但之后不会更新。
data: [{ value: $('input[name=polishedness]:checked').val(), name: 'Design'}]
我曾尝试在发生变化时调用刷新函数,但它 return 刷新不是一个函数。我真的很茫然,中文文档对我帮助不大:)
有什么建议吗?提前致谢!
您必须使用新数据再次致电 chartInstance.setOption()
。
我举个小例子:
// eChart is the chart instance!
echart.setOption({
// .... some configuration
series: [
{
type: "line",
name: "test",
data: [1,2,3,4,5,6]
}
]
})
在您更改了 select 框的值之后,您必须捕获该事件,更改配置对象的值并 调用 chartInstance.setOption()
再次.
因此,有时建议保存完整的配置对象并将更改存储在那里。
你可以使用resize()方法,例如
window.chartRadar = echarts.init(document.getElementById('echartId'));
window.chartRadar.setOption({
title: {
text: 'radar echart'
},
tooltip: {},
legend: {
data: ['data1', 'data2']
},
radar: {
// shape: 'circle',
name: {
textStyle: {
color: '#fff',
backgroundColor: '#999',
borderRadius: 3,
padding: [3, 5]
}
},
indicator: [
{ name: 'sales', max: 6500},
{ name: 'Administration', max: 16000},
{ name: 'Information Techology', max: 30000},
{ name: 'Customer Support', max: 38000},
{ name: 'Development', max: 52000},
{ name: 'Marketing', max: 25000}
]
},
series: [{
name: 'Budget vs spending',
type: 'radar',
// areaStyle: {normal: {}},
data : [
{
value : [4300, 10000, 28000, 35000, 50000, 19000],
name : 'data1'
},
{
value : [5000, 14000, 28000, 31000, 42000, 21000],
name : 'data2'
}
]
}]
});
一旦你已经制作了 echar,你就可以使用方法 "resize()" 重绘 echar,例如
window.chartRadar.resize();
如果您使用的是 Angular ,
您还可以使用 [merge] 选项让图表响应值更改,
<div echarts [options]="initialValue" [merge]= "dynamicData" class="demo-chart"></div>
参考:https://github.com/xieziyu/ngx-echarts#api
在你的模块中分配初始值如下,
initialValue: EChartOption = {
xAxis: {
type: 'time',
splitNumber : 20
},
yAxis: {
type: 'value',
name : '$',
nameLocation: 'middle'
},
series: [{
data : [],
type: 'line'
}]
}
并根据您的数据设置动态值,同时在 api 调用外部服务之前初始化 "this.dynamicData"
formDataforChart(backTestTrades) {
let i = 0;
for(let backTestTrade of backTestTrades){
let profitAndTime = [];
profitAndTime.push(backTestTrade.exitTime);
profitAndTime.push(backTestTrade.profitOrLoss);
this.eChartDataSeries.push(profitAndTime);
}
let data = {
data : this.eChartDataSeries,
type : 'bar'
};
this.dynamicData=this.initialValue;
this.dynamicData.series = [];
// Applying my dynamic data here
this.dynamicData.series.push(data);
}
我目前正在制作一个交互式图表,该图表应计算商业项目的潜在风险因素。为此,我一直在使用百度 ECharts,并使图表可视化工作,但无法在数据更改时更新图表。
数据来自外部问卷,它使用单选按钮作为值,并使用复选框打开和关闭整个集合。
<input type="checkbox" id="GPEbool" value="true"> Example Question 1</h4>
<form action="">
<input type="radio" id="polishedness" value="1"> Idea<br>
<input type="radio" id="polishedness" value="1"> Concept<br>
<input type="radio" id="polishedness" value="2"> Mockup<br>
<input type="radio" id="polishedness" value="5"> Prototype<br>
<input type="radio" id="polishedness" value="7"> Playable<br>
<input type="radio" id="polishedness" value="15"> Polish<br>
<input type="radio" id="polishedness" value="30"> Finished<br>
</form>
现在,问题是将数据放入图表中。它获得了最初选择的值(当向其中一个添加 "checked" 时),但之后不会更新。
data: [{ value: $('input[name=polishedness]:checked').val(), name: 'Design'}]
我曾尝试在发生变化时调用刷新函数,但它 return 刷新不是一个函数。我真的很茫然,中文文档对我帮助不大:)
有什么建议吗?提前致谢!
您必须使用新数据再次致电 chartInstance.setOption()
。
我举个小例子:
// eChart is the chart instance!
echart.setOption({
// .... some configuration
series: [
{
type: "line",
name: "test",
data: [1,2,3,4,5,6]
}
]
})
在您更改了 select 框的值之后,您必须捕获该事件,更改配置对象的值并 调用 chartInstance.setOption()
再次.
因此,有时建议保存完整的配置对象并将更改存储在那里。
你可以使用resize()方法,例如
window.chartRadar = echarts.init(document.getElementById('echartId'));
window.chartRadar.setOption({
title: {
text: 'radar echart'
},
tooltip: {},
legend: {
data: ['data1', 'data2']
},
radar: {
// shape: 'circle',
name: {
textStyle: {
color: '#fff',
backgroundColor: '#999',
borderRadius: 3,
padding: [3, 5]
}
},
indicator: [
{ name: 'sales', max: 6500},
{ name: 'Administration', max: 16000},
{ name: 'Information Techology', max: 30000},
{ name: 'Customer Support', max: 38000},
{ name: 'Development', max: 52000},
{ name: 'Marketing', max: 25000}
]
},
series: [{
name: 'Budget vs spending',
type: 'radar',
// areaStyle: {normal: {}},
data : [
{
value : [4300, 10000, 28000, 35000, 50000, 19000],
name : 'data1'
},
{
value : [5000, 14000, 28000, 31000, 42000, 21000],
name : 'data2'
}
]
}]
});
一旦你已经制作了 echar,你就可以使用方法 "resize()" 重绘 echar,例如
window.chartRadar.resize();
如果您使用的是 Angular , 您还可以使用 [merge] 选项让图表响应值更改,
<div echarts [options]="initialValue" [merge]= "dynamicData" class="demo-chart"></div>
参考:https://github.com/xieziyu/ngx-echarts#api
在你的模块中分配初始值如下,
initialValue: EChartOption = {
xAxis: {
type: 'time',
splitNumber : 20
},
yAxis: {
type: 'value',
name : '$',
nameLocation: 'middle'
},
series: [{
data : [],
type: 'line'
}]
}
并根据您的数据设置动态值,同时在 api 调用外部服务之前初始化 "this.dynamicData"
formDataforChart(backTestTrades) {
let i = 0;
for(let backTestTrade of backTestTrades){
let profitAndTime = [];
profitAndTime.push(backTestTrade.exitTime);
profitAndTime.push(backTestTrade.profitOrLoss);
this.eChartDataSeries.push(profitAndTime);
}
let data = {
data : this.eChartDataSeries,
type : 'bar'
};
this.dynamicData=this.initialValue;
this.dynamicData.series = [];
// Applying my dynamic data here
this.dynamicData.series.push(data);
}