12

我目前正在制作一个交互式图表,该图表应该计算商业项目的潜在风险因素。为此,我一直在使用百度 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>

现在,问题是将数据放入图表中。它正确地获取了最初选择的值(将“选中”添加到其中之一时),但之后不会更新。

data: [{ value: $('input[name=polishedness]:checked').val(), name: 'Design'}]

每当发生变化时,我都尝试调用刷新函数,但它会返回刷新不是函数。我真的很茫然,中文文档对我帮助不大:)

有什么建议么?提前致谢!

4

3 回答 3

26

您必须chartInstance.setOption()使用新数据再次调用。

我给你一个小例子:

// eChart is the chart instance!
echart.setOption({
   // .... some configuration
   series: [
       {
           type: "line",
           name: "test",
           data: [1,2,3,4,5,6]
       }
   ]
})

更改选择框的值后,您必须捕获该事件,更改配置对象的值并再次调用chartInstance.setOption()

因此,有时建议保存完整的配置对象并将更改存储在那里。

于 2016-12-14T11:56:12.090 回答
3

您可以使用 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'
                }
            ]
        }]
    });

一旦你已经让你 echart 你云使用方法“resize()”来重绘 echar 例如

window.chartRadar.resize();
于 2019-08-15T00:58:45.233 回答
3

如果您使用的是 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);  
  }
于 2020-04-19T18:14:50.183 回答