Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/218.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript amCharts实时数据--添加多个系列_Javascript_Graph_Setinterval_Amcharts_Amcharts4 - Fatal编程技术网

Javascript amCharts实时数据--添加多个系列

Javascript amCharts实时数据--添加多个系列,javascript,graph,setinterval,amcharts,amcharts4,Javascript,Graph,Setinterval,Amcharts,Amcharts4,免责声明:我仍在学习一些基础知识,我仍在学习正确的术语 我正在尝试使用一个带有实时数据的amCharts示例,并将另一个系列添加到图表中。我的目标是创建一个包含两个系列/行流数据的单一图表 我的基本工作示例如下: 我已经设法让两个系列的工作,但它非常笨重的时刻 以下是我的位置: am4core.useTheme(am4themes_animated); am4core.useTheme(am4themes_dark); var chart = am4core.create("chartdiv

免责声明:我仍在学习一些基础知识,我仍在学习正确的术语

我正在尝试使用一个带有实时数据的amCharts示例,并将另一个系列添加到图表中。我的目标是创建一个包含两个系列/行流数据的单一图表

我的基本工作示例如下:

我已经设法让两个系列的工作,但它非常笨重的时刻

以下是我的位置:

am4core.useTheme(am4themes_animated);
am4core.useTheme(am4themes_dark);

var chart = am4core.create("chartdiv", am4charts.XYChart);
chart.hiddenState.properties.opacity = 0;

chart.padding(0, 0, 0, 0);

chart.zoomOutButton.disabled = true;

var data = [];
var upstream = 10;
var i = 0;

for (i = 0; i <= 30; i++) {
    upstream -= Math.round((Math.random() < 0.5 ? 1 : -1) * Math.random() * 10);
    data.push({ date: new Date().setSeconds(i - 30), Upstream: upstream });
}
 var downstream = 10;
 var j = 0;
 for (j = 0; j <= 30; j++) {
   downstream -= Math.round((Math.random() < 0.5 ? 1 : -1) * Math.random() * 10);
   data.push({ date: new Date().setSeconds(j - 30), value: downstream });
}

chart.data = data;

var dateAxis = chart.xAxes.push(new am4charts.DateAxis());
dateAxis.renderer.grid.template.location = 0;
dateAxis.renderer.minGridDistance = 30;
dateAxis.dateFormats.setKey("second", "ss");
dateAxis.periodChangeDateFormats.setKey("second", "[bold]h:mm a");
dateAxis.periodChangeDateFormats.setKey("minute", "[bold]h:mm a");
dateAxis.periodChangeDateFormats.setKey("hour", "[bold]h:mm a");
dateAxis.renderer.inside = true;
dateAxis.renderer.axisFills.template.disabled = true;
dateAxis.renderer.ticks.template.disabled = true;

var valueAxis = chart.yAxes.push(new am4charts.ValueAxis());
valueAxis.tooltip.disabled = true;
valueAxis.interpolationDuration = 500;
valueAxis.rangeChangeDuration = 500;
valueAxis.renderer.inside = true;
valueAxis.renderer.minLabelPosition = 0.05;
valueAxis.renderer.maxLabelPosition = 0.95;
valueAxis.renderer.axisFills.template.disabled = true;
valueAxis.renderer.ticks.template.disabled = true;

var series1 = chart.series.push(new am4charts.LineSeries());
series1.dataFields.dateX = "date";
series1.dataFields.valueY = "Upstream";
series1.interpolationDuration = 500;
series1.defaultState.transitionDuration = 0;
series1.tensionX = 0.8;

var series2 = chart.series.push(new am4charts.LineSeries());
series2.dataFields.dateX = "date";
series2.dataFields.valueY = "Downstream";
series2.interpolationDuration = 500;
series2.defaultState.transitionDuration = 0;
series2.tensionX = 0.8;

chart.events.on("datavalidated", function () {
    dateAxis.zoom({ start: 1 / 15, end: 1.2 }, false, true);
});

dateAxis.interpolationDuration = 500;
dateAxis.rangeChangeDuration = 500;

document.addEventListener("visibilitychange", function() {
    if (document.hidden) {
        if (interval) {
            clearInterval(interval);
        }
    }
    else {
        startInterval();
    }
}, false);

// add data
var interval;
function startInterval() {
    interval = setInterval(function() {
        upstream =
            upstream + Math.round((Math.random() < 0.5 ? 1 : -1) * Math.random() * 5);
        var lastdataItem = series1.dataItems.getIndex(series1.dataItems.length - 1);
        chart.addData(
            { date: new Date(lastdataItem.dateX.getTime() + 1000), Upstream: upstream },
            1
        );
        downstream =
            downstream + Math.round((Math.random() < 0.5 ? 1 : -1) * Math.random() * 1);
        var lastdataItem = series2.dataItems.getIndex(series2.dataItems.length - 1);
        chart.addData(
            { date: new Date(lastdataItem.dateX.getTime() + 1000), Downstream: downstream },
            1
        );
    }, 1000);
}

startInterval();

// all the below is optional, makes some fancy effects
// gradient fill of the series
series1.fillOpacity = 1;
var gradient = new am4core.LinearGradient();
gradient.addColor(chart.colors.getIndex(0), 0.2);
gradient.addColor(chart.colors.getIndex(0), 0);
series1.fill = gradient;

// this makes date axis labels to fade out
dateAxis.renderer.labels.template.adapter.add("fillOpacity", function (fillOpacity, target) {
    var dataItem = target.dataItem;
    return dataItem.position;
})

// need to set this, otherwise fillOpacity is not changed and not set
dateAxis.events.on("validated", function () {
    am4core.iter.each(dateAxis.renderer.labels.iterator(), function (label) {
        label.fillOpacity = label.fillOpacity;
    })
})

// this makes date axis labels which are at equal minutes to be rotated
dateAxis.renderer.labels.template.adapter.add("rotation", function (rotation, target) {
    var dataItem = target.dataItem;
    if (dataItem.date.getTime() == am4core.time.round(new Date(dataItem.date.getTime()), "minute").getTime()) {

      target.verticalCenter = "middle";  
      target.horizontalCenter = "left";
        return -90;
    }
    else {
        target.verticalCenter = "bottom";  
        target.horizontalCenter = "middle";
        return 0;
    }
})

// bullet at the front of the line
var bullet = series1.createChild(am4charts.CircleBullet);
bullet.circle.radius = 5;
bullet.fillOpacity = 1;
bullet.fill = chart.colors.getIndex(0);
bullet.isMeasured = false;

series1.events.on("validated", function() {
    bullet.moveTo(series1.dataItems.last.point);
    bullet.validatePosition();
});

am4core.useTheme(am4themes\u动画);
am4core.useTheme(am4themes_-dark);
var chart=am4core.create(“chartdiv”,am4charts.XYChart);
chart.hiddenState.properties.opacity=0;
填充(0,0,0,0);
chart.zoomOutButton.disabled=true;
var数据=[];
上游var=10;
var i=0;
对于(i=0;i