- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试显示收集的 DynamoDB 数据的实时折线图。该图表将显示 3 个数据范围(过去 30 天、过去 7 天、过去 24 小时)。选择范围后,将查询 DynamoDB 并创建 ChartJS 折线图。绘制初始图表后,Dynamo 将每 5 秒再次查询一次,并且图表将使用新查询的结果进行更新。
由于某种原因,.update() 调用向图表中添加了重复数据。我确信这是因为查询将提取一些与原始查询相同的数据,但我的印象是更新调用将重新呈现图表的数据,所以我不明白为什么会有重复的数据。
相关代码如下:
var getDateTimeStr = function(hours){
//create a string of the date and time 30 days ago
var ts = new Date().getTime();
var tsYest = (ts - (hours /*hrs in 30 days*/ * 3600) * 1000);
var d = new Date(tsYest);
var yestDateStr = d.getFullYear() + '/'
+ ('0' + (d.getMonth()+1)).slice(-2) + '/'
+ ('0' + d.getDate()).slice(-2) + ' '
+ ('0' + (d.getHours()+1)).slice(-2) + ':'
+ ('0' + (d.getMinutes()+1)).slice(-2) + ':'
+ ('0' + (d.getSeconds()+1)).slice(-2);
console.log(yestDateStr);
return yestDateStr;
}
//PARAMETERS FOR 3 RANGES
var params1 = {
TableName: "O2Sensor_data",
ConsistenRead: false,
ScanindexForward: true,
KeyConditionExpression: "sensor_id = :sensor AND #dtdt >= :start_date",
ExpressionAttributeNames: {
"#dtdt": "DateTime"
},
ExpressionAttributeValues: {
":sensor": "sensor1",
":start_date": getDateTimeStr(720)
}
}
var params2 = {
TableName: "O2Sensor_data",
ConsistenRead: false,
ScanindexForward: true,
KeyConditionExpression: "sensor_id = :sensor AND #dtdt >= :start_date",
ExpressionAttributeNames: {
"#dtdt": "DateTime"
},
ExpressionAttributeValues: {
":sensor": "sensor1",
":start_date": getDateTimeStr(168)
}
}
var params3 = {
TableName: "O2Sensor_data",
ConsistenRead: false,
ScanindexForward: true,
KeyConditionExpression: "sensor_id = :sensor AND #dtdt >= :start_date",
ExpressionAttributeNames: {
"#dtdt": "DateTime"
},
ExpressionAttributeValues: {
":sensor": "sensor1",
":start_date": getDateTimeStr(24)
}
}
//DYNAMODB QUERY FUNCTION
function chartCreate(params, color){
console.log("Querying DynamoDB");
docClient.query(params, function(err, data){
if(err) console.log(err, err.stack);
else{
DateTimeArr = [];
o2readingArr = [];
data.Items.forEach(function(item){
DateTimeArr.push(item.DateTime.toString());
o2readingArr.push(item.o2percent.toString());
});
var dataMap = {
type: 'line',
data: {//displays readings form sensor based on the range selected
labels: DateTimeArr,
datasets: [{
label: '% O2 In Air',
data: o2readingArr,
backgroundColor: color
},
{//creates a line at 19.5% to see if data readings are below safe value
label: "19.5%",
data: Array.apply(null, new Array(o2readingArr.length)).map(Number.prototype.valueOf, 19.5),
fill: false,
radius: 0,
borderColor: "rgba(0,0,0,.5)"
}]//end of datasets
},
options: {
animation: false,
responsive: true,
scaleOverride: true
}
};//end of dataMap var declaration
//CREATE CHART
var ctx = document.getElementById("lineChart").getContext("2d");
ctx.canvas.width = 600;
ctx.canvas.height = 256;
window.datChart = new Chart(ctx, dataMap);
}//end of else statement
});//end of query function
}
function chartUpdate(params){
console.log("Querying DynamoDB");
docClient.query(params, function(err, data){
if(err) console.log(err, err.stack);
else{
data.Items.forEach(function(item){
DateTimeArr.push(item.DateTime.toString());
o2readingArr.push(item.o2percent.toString());
});
}
});
}
function chooseChart(){
if(window.datChart){window.datChart.destroy();}
if(document.getElementById("sel1").value == "last30"){
currParams = params1;
currColor = "rgba(0,0,255,.8)";
chartCreate(params1, "rgba(0,0,255,.8)");
}//blue
else if(document.getElementById("sel1").value == "last7"){
currParams = params2;
currColor = "rgba(0,255,0,.8)";
chartCreate(params2, "rgba(0,255,0,.8)");
}//green
else if(document.getElementById("sel1").value == "last24"){
currParams = params3;
currColor = "rgba(255,0,0,.8)";
chartCreate(params3, "rgba(255,0,0,.8)");
}//red
else{console.log("something went wrong in chooseChart function");}
}
chooseChart();
setInterval(function(){
window.datChart.destroy();
chartUpdate(currParams);
window.datChart.update();
}, 5000);
我尝试过其他方法,例如每次完全重绘图表,但这会导致网页上闪烁,这相当烦人。我不确定如何让它发挥作用,以便图表仅使用新数据进行更新。
任何帮助或建议将不胜感激。谢谢。
最佳答案
我编写了一个函数来检查已存储在数组中的日期,它现在看起来运行良好。
这是函数:
var isinArr = function(str){
for(i=0; i<DateTimeArr.length; i++){
if(str === DateTimeArr[i]){
return true;
}
}
return false;
}
这是更新后的 ChartUpdate() 函数:
function chartUpdate(params){
console.log("Querying DynamoDB");
docClient.query(params, function(err, data){
if(err) console.log(err, err.stack);
else{
data.Items.forEach(function(item){
if(!isinArr(item.DateTime.toString())){
DateTimeArr.push(item.DateTime.toString());
o2readingArr.push(item.o2percent.toString());
}
});
}
});
}
关于javascript - 从 DynamoDB 查询更新 ChartJS 折线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41145694/
有没有办法在 vue-chartjs 中制作带圆角的条形图?我在谷歌上搜索了一下,发现我们可以使用此 url 中给出的渲染条的实现来扩展条形图 - How to put rounded corners
我想通过提供两个数组来创建多条垂直线,第一个称为marketing,其中包含诸如“2017-09-21”等日期和一个数组称为 amount,仅包含数字。 我使用 ChartJS 创建了折线图。最终结果
(对不起我的英语)我将 chartjs-plugin-streaming 用于实时 chartjs,我想使用 chartjs-plugin-zoom。 但是缩放不起作用。 当我测试缩放时,出现缩放区域
我使用 angualr2-chartjs 来显示图表。我的问题是当我动态更改选项时图表更新只有一次。在控制台中,我看到一切都很好,但在 View 中我看不到变化。我使用了 chartjs-plugin
我正在尝试创建类似于 www.chartjs.org 顶部的内容其中有一个随机移动的背景条形图。我发现了另一个类似的question ,但是它似乎不起作用。当我在下面添加时,它不会添加除 400x40
感谢任何提示和/或帮助!我在这里碰壁试图让图表呈现。我已经恢复到测试一个非常简单的方法(下面的代码),但我仍然收到以下错误: 类型错误:无法读取未定义的属性(读取“ map ”) 我可以记录从 use
chartjs-plugin-zoom是 Chart.js 的缩放和平移插件 您可以调用 chart.resetZoom() 以编程方式将缩放重置为默认状态。参见 this example on js
我正在尝试将 Chart.js 与 Vue.js 一起使用,这就是我得到的编译结果,但我没有在 GUI 上看到任何显示。 这是我的文件 DonutChart.vue: // NOT SURE IF
好的,所以我正在尝试通过 VueJS 创建一个 ChartJS 实例,以便我可以通过组件内的 AJAX 请求轻松更新其数据。 基本上它可以工作,创建了 ChartJS 实例,但它是空的,高度和宽度为
我想从 chartjs-chart-treemap 添加树状图到我现有的使用 react-chartjs-2 的项目中. 我到目前为止尝试过: import ChartComponent from '
是否可以定义具有多级别/类别轴的条形图? 例如,我想显示地区/省类别,如下 Excel 图表所示: 我找到了this使用多个 xAxes 的示例。 xAxes:[ { id:'xA
我正在使用 chart.js (V2) 尝试构建一个条形图,用户无需将鼠标悬停在任何地方或点击任何地方即可获得更多信息。我提供了两个示例,说明我希望如何编辑我的图表。 Two edited versi
我想使用 Chartjs(chartjs.org) 作为我的图表工具以及使用 TypeScript 的 AngularJS。我已经从 GitHub 安装了 DefinitelyTyped for Ch
我正在使用 chartjs-plugin-datalabels,并且在大图表中显示较小的数据集时值重叠 这是 chartjs-data-plugin 配置 options: { plu
var yLabels = { 1 : 'New', 2 : 'Learning Phase', 3
我正在创建图表以使用图表 js 呈现一些数据。 const data = { labels: ["1 Dec", "8 Dec", "16 Dec", "31 Dec"], dat
我正在尝试将其他数据插入圆环图中。 Controller 将这样的数组传递给 View : [ 0 => array:3 [ "profit" => 20 "sex" => arr
将百分比值添加到图例标签的最简单方法是什么? 我相信它会使用 generateLabels: function (chart) {},谁能提供一个干净的例子? 最佳答案 似乎没有任何本地方式来显示百分
我已经多次看到这个问题,但我找不到适合我的解决方案。 我将一个 Django 变量传递给 Chartjs 进行绘图,所有的个位数都是正确的,但它将两位数变成了一个。像 11 是 1,1...23 是
我正在尝试使用 chartjs 数据标签插件获取每个条上的值。 所以在条形“a”上方 a 想看到数字 30 及以上或在条形“b”内我想看到数字 50。 但它根本没有显示任何值。 任何人都可以帮助并告诉
我是一名优秀的程序员,十分优秀!