- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从服务器端加载数据并将它们一一显示在 Highcharts 中。
但在将它们显示在 Highchart 上之前,我会对数据进行一些处理,然后将其渲染到 Highcharts 中。
我使用 AJAX,这样我每次都可以获取数据,而无需刷新页面并重新加载图表。
图表对于第一组数据运行良好,然后显示未定义,并且图表未显示任何下一组数据。
这里有 random.php 文件,我用它来获取数据:
header("Content-type: text/json");
$data = [];
for($i=0; $i<500; $i++)
{
$data[] = rand(0,10);
}
$into_mysql = json_encode($data);
echo $into_mysql;
现在我正在获取其他页面图表中的数据:
var chart;
// Prototype to Request Data using `AJAX`
function requestData() {
$.ajax({
url: 'random.php',
async: false,
success: function (data) {
y = data;
console.log(y);
return (y);
}
});
}
// Fetch the data from the `requestData` and process it.
function fetch() {
requestData();
var divisor = 2;
var count = 0;
for (var i = 0, length = y.length; i < length; i++) {
y[i] /= divisor;
}
console.log(y);
return (y);
setInterval(function () { requestData }, 1000);
}
var json_array = fetch();
var i = 0;
function next() {
return json_array[i++];
// i++;
}
Highcharts.chart('container', {
chart: {
type: 'line',
animation: Highcharts.svg, // don't animate in old IE
marginRight: 10,
events: {
load: function () {
// set up the updating of the chart each second
var series = this.series[0],
chart = this;
var count = 0;
setInterval(function () {
var x = (new Date()).getTime(), // current time
y = next();
console.log(y);
series.addPoint([x, y], false, true);
chart.redraw(false);
}, 1000 / 130);
}
}
},
time: {
useUTC: false
},
title: {
text: 'ECG Graph Plot From MySQl Data'
},
xAxis: {
type: 'datetime',
labels: {
enabled: false
},
tickPixelInterval: 150
},
yAxis: {
//max: 1.5,
//min: -1.5,
title: {
text: 'Value'
},
plotLines: [{
value: 0,
width: 1,
color: '#808080'
}]
},
tooltip: {
headerFormat: '<b>{series.name}</b><br/>',
pointFormat: '{point.x:%Y-%m-%d %H:%M:%S}<br/>{point.y:.2f}'
},
legend: {
enabled: false
},
exporting: {
enabled: false
},
series: [{
animation: false,
name: 'ECG Graph Plot From MySQl Data',
dataGrouping: {
enabled: false
},
data: (function () {
// generate an array of random data
var data = [],
time = (new Date()).getTime(),
i;
for (i = -1000; i <= 0; i += 1) {
data.push([
time + i * 10,
null
]);
}
return data;
}())
}]
});
所以我要求的是在不破坏数据的情况下将数据一一渲染。当 random.php 中的一个数据集结束时。下一个数据应该从该数据的延续开始。
更新:
考虑这样一个场景:每隔几秒生成一个包含 500 个数据的数组。我想要的是在一个 Highcharts 中一一显示数组点。但仅显示第一组数组数据,其余数组数据未显示。
最佳答案
我想我找到了解决您的代码的可能方法。首先,您当前的方法存在一些误解:
return
语句之后没有执行任何操作。是的,正如您在评论中指出的那样,在函数中执行 return 后,什么也没有完成
在您的 Highcharts 中,您的数据取决于 json_array
(基本上您读取数组的 X 元素),但实际上您从未使用更多信息更新 json_array
.
Ok... what should I do?
让我们看看。首先,您应该确保在第一次获取之后的某个时间间隔内获取数据。如何做到这一点:
function fetch() {
requestData();
var divisor = 2;
var count = 0;
for (var i = 0, length = y.length; i < length; i++) {
y[i] /= divisor;
}
console.log(y);
// Create the interval before returning, and actually calling the function
setInterval(function () { requestData() }, 1000);
return (y);
}
其次,您需要每个 requestData
更新您正在读取的数组:免责声明,我正在使用您的评论的 jsfiddle 创建一个简单的示例
var json_array = fetch();
function requestData() {
var data = [];
for (var i = 0; i < 500; i++) {
data.push(Math.random() * 10);
}
y = data;
// Check that json_array have been initialized and after add the data that we fetched in it (so from [1, 2, 3] to... [1, 2, 3, 4, 5, 6]
if (Array.isArray(json_array)) {
json_array = json_array.concat(data);
}
}
使用你的ajax代码,它应该看起来像
function requestData() {
$.ajax({
url: 'random.php',
async: false,
success: function (data) {
/// you can skip this check... I just do it for safety
if (Array.isArray(json_array)) {
json_array = json_array.concat(data);
}
}
});
}
基本上就是这样,只要您的请求比您在图表中读取 X 的速度更快,它就应该可以正常工作。
额外这是不需要的,因为在解决方案中,我尝试尽可能少地修改您的代码,并主要指出您的方法有什么问题,但我会考虑对您的代码进行下一步改进:
这是实现的抽象
class DataFetcher {
constructor() {
this.currentDataPoint = 0
this.data = fetch(...)
this.keepFetching()
}
keepFetching() {
fetchMoreData().onSuccess((data) => { this.data = data }
}
getNext() {
if (this.isThereData) {
// Return data point and increase pointer
dataPoint = this.data[this.currentDataPoint]
this.currentDataPoint =+ 1
return dataPoint
}
// Return nothing because there is no more data points
return null
}
isThereData() {
return this.data.length >= this.currentDataPoint + 1
}
}
最后,您可以使用映射函数抽象此数据的划分:
function fetch() {
requestData();
y = y.map(value => value/2);
console.log(y);
// Create the interval before returning, and actually calling the function
setInterval(function () { requestData() }, 1000);
return (y);
}
// Also the other function
function requestData() {
var data = [];
for (var i = 0; i < 500; i++) {
data.push(Math.random() * 10);
}
y = data.map(dataPoint => dataPoint/2);
// Check that json_array have been initialized and after add the data that we fetched in it (so from [1, 2, 3] to... [1, 2, 3, 4, 5, 6]
if (Array.isArray(json_array)) {
json_array = json_array.concat(data);
}
}
希望这可以帮助您完善解决方案!
关于javascript - 在每个数组绘图后更新图表,Highcharts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58743258/
如何将导出模块包含到 angular2 应用程序中? 我尝试将以下脚本添加到 index.html 但没有任何反应。 最佳答案 从 Angular CLI 1.0-RC.1 和最新的 angular
我正在为 Web 应用程序使用 HighCharts Javascript 库。当我下载 Highchart 时,我需要 Highchart 水印图像。 我正在使用普通的 hicgchart 代码。
我是 highcharts 的新手。默认情况下,Highchart 在图表本身内显示工具提示。这是否可以在图表外部显示工具提示,并显示在与内部显示相同的位置。有帮助吗? 最佳答案 您可以定义自己的 d
我正在尝试使用日期时间格式的数据创建 highcharts 热图。数据以小时为单位,持续数天。我不希望图表每天都环绕,但希望所有数据都在一条线上。 具体来说,它用于显示每小时的云量百分比,因此每个热图
我正在用 angular 中的简单图形来验证 highcharts。但是导出按钮不显示。我在 html 页面中添加脚本: 并在图表中添加属性: export :true, navigat
我很想知道为什么按钮 2 在这个 example 中不起作用 在这个 jsfiddle 示例中,附加到按钮 1 的“更新”方法正在运行,但在我的原始代码中,“更新”也不起作用。它显示错误:“对象# 没
我正在尝试在 highcharts 中编辑工具提示的边框。 我遇到的问题是我只想显示底部边框。 例如,您可以执行以下操作: tooltip: {borderWidth: 10}//但问题是在整个工具提
Highcharts的十字线可以显示在面积图的顶部而不是隐藏在其下方吗? 这是问题jsfiddle.net/hHjZb/1286/的示例 最佳答案 更新: Highcharts现在已经实现了the O
在将图表导出为PNG时,我试图在饼图上添加图例。 这是我的代码: var chart_23_106; $(document).ready(function () { chart_23_106 = ne
带三角规的半圆饼 如何在图表顶部创建带有三角形仪表的上述半圆饼图。 我的车速表可以工作,但不能满足需要。 在highchart api中有没有办法使用三角形作为仪表,而不是车速表? 谢谢 最佳答案 这
我们使用的是Highchart气泡图,但是,当气泡x和y在图中位于同一位置且气泡y较小时,将无法看到或单击得很少的气泡。 有什么方法可以先绘制较大的气泡,然后在顶部绘制较小的气泡?还是说较小的始终位于
是否可以使用百分比设置 Highcharts 的宽度?每当调整页面大小时,图表应具有足够的响应速度以适合页面大小吗? One Solution 这里的问题是我有3个图表需要并排显示,每次调整页面大小时
我在更新基本列 Highcharts 时遇到问题。 我从服务器返回的 json 数组是: [{"name":"positive","data":[18,35,32,38]},{"name":"nega
有没有办法创建重叠的列? 例如在 this jsFiddle ,蓝色和红色列应如下所示相互重叠,蓝色在后面,红色在前面。 澄清一下,我不想要堆叠的列,蓝色和红色列都应该从 xAxis (y=0) 开始
如何自定义图例 从 对此 最佳答案 查看 Highcharts legend api 选项。您可以使用所需的 css 进一步自定义。使用适当的 svg 图像(背景颜色取自图表本身) legend: {
我正在尝试使用模式作为列范围以允许条形图工作。 图案出现但不使用预定义的图案,所以它只是纯蓝色。通常它使用已定义的条纹图案,并在散点图等上完美运行。 这是一个片段,展示了我的意思: Highchar
我正在使用 HighStock JS 库生成一个图表,该图表使用 xAxis 的线性序列(不是时间序列)。 我仍然想使用范围选择器来缩放到我的线性系列中的预定范围。这可能吗? 例如;说我的 xAxis
我需要从一个系列向下钻取到多个系列。但是下钻 id 在一个系列上似乎是唯一的,这意味着我无法从单个系列下钻到多个系列;只有一个。我该如何解决这个问题? 最佳答案 可以使用 chart.addSingl
我制作了一个带有分组和堆叠列的Highcharts图表,就像在这里的示例http://www.highcharts.com/demo/column-stacked-and-grouped一样。该示例显
如何在 highcharts/highstock 中将滚动条位置设置为Left? 如图表加载时的图像所示, 滚动条自动右对齐。 有没有办法将它定位到左侧? 最佳答案 我们可以通过将 min 设置为 0
我是一名优秀的程序员,十分优秀!