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);  
  }