Apexcharts 在呈现新系列之前删除旧数据系列
Apexcharts remove old data series before render new series
我正在使用顶点图表从 json 输出中进行简单的数据可视化。我的图表基于纯 javascript 而不是 Vue 或其他框架。
我的 json (php) 后端创建两个 json 输出来绘制如下图表
JSON 1
{
"x": "2019-05-27 16:18:48",
"y": "100"
},
{
"x": "2019-05-27 16:25:09",
"y": "110"
},
JSON 2
{
"x": "2019-05-27 16:18:48",
"y": "60"
},
{
"x": "2019-05-27 16:25:09",
"y": "65"
},
基于以上两个 json 输出,我检索数据并使用类别配对值方法绘制图表。下面是负责检索数据和绘制图表的代码。
获取json数据的函数
function data_function(){
$.ajax({
type: "Get",
url: backend,
data:{
param: "all_a"
},
async: true,
cache: false,
success: function(data) {
a_data = data;
$.ajax({
apex_task: "Get",
url: backend,
data:{
param: "all_b"
},
async: true,
cache: false,
success: function(data) {
b_data = data;
chart(a_data,b_data);
}
});
}
});
}
绘制图表功能
function draw_chart(a_data,b_data) {
var options = {
chart: {
height: 400,
type: 'bar',
stacked: false
},
series: [
{
name: 'a',
data: a_data,
},
{
name: 'b',
data: b_data,
}],
yaxis: [
{
axisTicks: {
show: true,
},
axisBorder: {
show: true,
color: '#008FFB'
},
labels: {
style: {
color: '#008FFB',
}
}
},
]
}
var chart = new ApexCharts(document.querySelector("#chartdiv"), options);
chart.render();
}
在我第二次使用新数据渲染图表之前,这一切正常。当我加载不同的数据而不重新加载时,windows 图表恰好是滞后的并且使用旧的不正确数据渲染多次。有时我必须多次 运行 data_fnction 才能正确呈现图表。
我该如何解决这个问题?我需要使用像 appendchart 这样的功能吗?我如何使用我的 data_function
您应该在开始时只调用一次 render()
方法(即使是空数组也应该可以),然后在 ajax 调用中调用 updateSeries()
方法来更新数据图表。
var options = {
chart: {
height: 400,
type: 'bar',
stacked: false
},
series: [],
yaxis: [{
axisTicks: {
show: true,
},
axisBorder: {
show: true,
color: '#008FFB'
},
labels: {
style: {
color: '#008FFB',
}
}
}]
}
var chart = new ApexCharts(document.querySelector("#chartdiv"), options);
chart.render();
您的 ajax 调用图表的 updateSeries 方法
function data_function() {
$.ajax({
type: "Get",
url: backend,
data: {
param: "all_a"
},
async: true,
cache: false,
success: function (data) {
a_data = data;
$.ajax({
apex_task: "Get",
url: backend,
data: {
param: "all_b"
},
async: true,
cache: false,
success: function (data) {
b_data = data;
chart.updateSeries([{
name: 'a',
data: a_data
}, {
name: 'b',
data: b_data
}])
}
});
}
});
}
Docs 对于 updateSeries
我正在使用顶点图表从 json 输出中进行简单的数据可视化。我的图表基于纯 javascript 而不是 Vue 或其他框架。
我的 json (php) 后端创建两个 json 输出来绘制如下图表
JSON 1
{
"x": "2019-05-27 16:18:48",
"y": "100"
},
{
"x": "2019-05-27 16:25:09",
"y": "110"
},
JSON 2
{
"x": "2019-05-27 16:18:48",
"y": "60"
},
{
"x": "2019-05-27 16:25:09",
"y": "65"
},
基于以上两个 json 输出,我检索数据并使用类别配对值方法绘制图表。下面是负责检索数据和绘制图表的代码。
获取json数据的函数
function data_function(){
$.ajax({
type: "Get",
url: backend,
data:{
param: "all_a"
},
async: true,
cache: false,
success: function(data) {
a_data = data;
$.ajax({
apex_task: "Get",
url: backend,
data:{
param: "all_b"
},
async: true,
cache: false,
success: function(data) {
b_data = data;
chart(a_data,b_data);
}
});
}
});
}
绘制图表功能
function draw_chart(a_data,b_data) {
var options = {
chart: {
height: 400,
type: 'bar',
stacked: false
},
series: [
{
name: 'a',
data: a_data,
},
{
name: 'b',
data: b_data,
}],
yaxis: [
{
axisTicks: {
show: true,
},
axisBorder: {
show: true,
color: '#008FFB'
},
labels: {
style: {
color: '#008FFB',
}
}
},
]
}
var chart = new ApexCharts(document.querySelector("#chartdiv"), options);
chart.render();
}
在我第二次使用新数据渲染图表之前,这一切正常。当我加载不同的数据而不重新加载时,windows 图表恰好是滞后的并且使用旧的不正确数据渲染多次。有时我必须多次 运行 data_fnction 才能正确呈现图表。
我该如何解决这个问题?我需要使用像 appendchart 这样的功能吗?我如何使用我的 data_function
您应该在开始时只调用一次 render()
方法(即使是空数组也应该可以),然后在 ajax 调用中调用 updateSeries()
方法来更新数据图表。
var options = {
chart: {
height: 400,
type: 'bar',
stacked: false
},
series: [],
yaxis: [{
axisTicks: {
show: true,
},
axisBorder: {
show: true,
color: '#008FFB'
},
labels: {
style: {
color: '#008FFB',
}
}
}]
}
var chart = new ApexCharts(document.querySelector("#chartdiv"), options);
chart.render();
您的 ajax 调用图表的 updateSeries 方法
function data_function() {
$.ajax({
type: "Get",
url: backend,
data: {
param: "all_a"
},
async: true,
cache: false,
success: function (data) {
a_data = data;
$.ajax({
apex_task: "Get",
url: backend,
data: {
param: "all_b"
},
async: true,
cache: false,
success: function (data) {
b_data = data;
chart.updateSeries([{
name: 'a',
data: a_data
}, {
name: 'b',
data: b_data
}])
}
});
}
});
}
Docs 对于 updateSeries