dygraphs 自动设置带有 error/custom 柱的图表的值范围?
dygraphs automatically set value range for chart with error/custom bars?
我有一张图表,其数据是从 SQL 数据库加载的,该图表可能包含相同 x 值的重复值。
即时间55秒的X(time)值可能有温度值:50、51、49、52,存储在不同的行。
我实现了错误栏以向用户表示这些差异,因为同一系列不可能每个 x 点有多个 y 值。
绘图之前的结果 csv 数据是 [49, 50, 52]... 这已经过测试并且效果很好,但是一旦我开始工作,现在我所有的图表 y 轴都从值 0 (而不是本例中的 49)。
有什么方法可以自动将最小 y 值自动生成为生成的最小 y 值,即 49?因为它是在没有错误栏的情况下完成的?还是必须进行硬编码?
我目前正在实现一个绘制点回调函数,如果没有已经实现的方法,我可以结合一种方法来提取最小 y 值来设置我的限制。
//编辑 添加代码和图片....
function createDyGraph(newChart) {
"use strict";
var min = 100000000; //value way over possible range of data
newChart.dyGraph = new Dygraph(
document.getElementById(newChart.chartGraphID),
newChart.csvData,
{
drawPointCallback: function (g, seriesName, canvasContext, cx, cy,
seriesColor, pointSize, row) {
var col = g.indexFromSetName(seriesName),
val = parseInt(g.getValue(row, col).toString().replace(/,/g, ""), 10),
color = '';
if (newChart.erroneousData[row]) {
color = 'red';
} else {
color = newChart.colors[col - 1];
}
if (val < min) {
min = val;
}
if (color === 'red') {
canvasContext.beginPath();
canvasContext.strokeStyle = 'red';
canvasContext.arc(cx, cy, pointSize, 0, 2 * Math.PI, false);
canvasContext.stroke();
} else {
canvasContext.beginPath();
canvasContext.strokeStyle = seriesColor;
canvasContext.arc(cx, cy, pointSize, 0, 2 * Math.PI, false);
canvasContext.stroke();
}
},
customBars: true,
colors: newChart.colors,
animatedZooms: true,
connectSeparatedPoints: true,
showLabelsOnHighlight: true,
ylabel: 'Count / Value',
xlabel: 'Time (Seconds)',
drawPoints: true,
pointSize: 1,
labels: newChart.labels,
labelsDiv: document.getElementById('legend' + chartIndex),
legend: 'always'
}
);
alert(min);
}
//编辑:添加了JSON数据
[["2014-02-06T16:30:00.000Z",[null,2739,null],[null,1786,null],[null,3680.1204,null],[null,2390.9182,null ]],
["2014-02-06T16:30:01.000Z",[null,2739,null],[null,1786,null],[null,3680.1204,null],[null,2390.9182,null] ],
["2014-02-06T16:30:02.000Z",[null,2739,null],[null,1786,null],[null,3680.1204,null],[null,2390.9182,null] ],
["2014-02-06T16:30:03.000Z",[null,2739,null],[null,1786,null],[null,3680.1204,null],[null,2390.9182,null] ],
["2014-02-06T16:30:04.000Z",[null,2739,null],[null,1786,null],[null,3680.1204,null],[null,2390.9182,null] ],
["2014-02-06T16:30:05.000Z",[null,2739,null],[null,1786,null],[null,3680.1204,null],[null,2390.9182,null] ],
["2014-02-06T16:30:06.000Z",[null,2739,null],[null,1786,null],[null,3680.1204,null],[null,2390.9182,null] ],
...
["2014-02-06T16:30:59.000Z",[null,2740,null],[null,1787,null],[null,3681.464,null],[null,2392.2569,null] ]]
好吧,我刚刚弄明白了...对于 customBars,CSV 格式最初不应该是 [null, Value, null],而是 [value, value, value]。
因此,如果您想为其添加最小值或最大值,CSV 将更新为
[最小值、最大值]
我有一张图表,其数据是从 SQL 数据库加载的,该图表可能包含相同 x 值的重复值。
即时间55秒的X(time)值可能有温度值:50、51、49、52,存储在不同的行。
我实现了错误栏以向用户表示这些差异,因为同一系列不可能每个 x 点有多个 y 值。
绘图之前的结果 csv 数据是 [49, 50, 52]... 这已经过测试并且效果很好,但是一旦我开始工作,现在我所有的图表 y 轴都从值 0 (而不是本例中的 49)。
有什么方法可以自动将最小 y 值自动生成为生成的最小 y 值,即 49?因为它是在没有错误栏的情况下完成的?还是必须进行硬编码?
我目前正在实现一个绘制点回调函数,如果没有已经实现的方法,我可以结合一种方法来提取最小 y 值来设置我的限制。
//编辑 添加代码和图片....
function createDyGraph(newChart) {
"use strict";
var min = 100000000; //value way over possible range of data
newChart.dyGraph = new Dygraph(
document.getElementById(newChart.chartGraphID),
newChart.csvData,
{
drawPointCallback: function (g, seriesName, canvasContext, cx, cy,
seriesColor, pointSize, row) {
var col = g.indexFromSetName(seriesName),
val = parseInt(g.getValue(row, col).toString().replace(/,/g, ""), 10),
color = '';
if (newChart.erroneousData[row]) {
color = 'red';
} else {
color = newChart.colors[col - 1];
}
if (val < min) {
min = val;
}
if (color === 'red') {
canvasContext.beginPath();
canvasContext.strokeStyle = 'red';
canvasContext.arc(cx, cy, pointSize, 0, 2 * Math.PI, false);
canvasContext.stroke();
} else {
canvasContext.beginPath();
canvasContext.strokeStyle = seriesColor;
canvasContext.arc(cx, cy, pointSize, 0, 2 * Math.PI, false);
canvasContext.stroke();
}
},
customBars: true,
colors: newChart.colors,
animatedZooms: true,
connectSeparatedPoints: true,
showLabelsOnHighlight: true,
ylabel: 'Count / Value',
xlabel: 'Time (Seconds)',
drawPoints: true,
pointSize: 1,
labels: newChart.labels,
labelsDiv: document.getElementById('legend' + chartIndex),
legend: 'always'
}
);
alert(min);
}
//编辑:添加了JSON数据
[["2014-02-06T16:30:00.000Z",[null,2739,null],[null,1786,null],[null,3680.1204,null],[null,2390.9182,null ]],
["2014-02-06T16:30:01.000Z",[null,2739,null],[null,1786,null],[null,3680.1204,null],[null,2390.9182,null] ],
["2014-02-06T16:30:02.000Z",[null,2739,null],[null,1786,null],[null,3680.1204,null],[null,2390.9182,null] ],
["2014-02-06T16:30:03.000Z",[null,2739,null],[null,1786,null],[null,3680.1204,null],[null,2390.9182,null] ],
["2014-02-06T16:30:04.000Z",[null,2739,null],[null,1786,null],[null,3680.1204,null],[null,2390.9182,null] ],
["2014-02-06T16:30:05.000Z",[null,2739,null],[null,1786,null],[null,3680.1204,null],[null,2390.9182,null] ],
["2014-02-06T16:30:06.000Z",[null,2739,null],[null,1786,null],[null,3680.1204,null],[null,2390.9182,null] ],
...
["2014-02-06T16:30:59.000Z",[null,2740,null],[null,1787,null],[null,3681.464,null],[null,2392.2569,null] ]]
好吧,我刚刚弄明白了...对于 customBars,CSV 格式最初不应该是 [null, Value, null],而是 [value, value, value]。
因此,如果您想为其添加最小值或最大值,CSV 将更新为 [最小值、最大值]