这是一个非常具体的用途,但它可以派上用场。
想象一下,你有一个不同的堆栈值,一些数据变化很大,一些数据几乎不变。 如果使用默认顺序并且变量数据堆叠在常量数据下,则变量数据将使常量数据具有非常可变的基数。 因此,如果您首先在底部堆叠较少变量的数据,它可能有所帮助。
示例:这两个图表显示了如何通过堆叠移动较少的较深数据来提高可读性,即具有较小的标准偏差。
默认图表可能导致可读性差
按标准差排序时提高了可读性
答案 0 :(得分:1)
rrdtool graph
和PRINT
命令获取数据源的标准偏差(stdev_array
)stdev_array
stdev_array
这是PHP中的代码,但任何语言都可以做到
我正在使用RRDtool 1.4.5
不要忘记定义$rrd_path
(rrd文件的路径),$img_path
(写入图像的路径),$data_sources
(DS名称数组,取决于您如何构建RRD),$rrd_colors
(六种颜色数组)。
$rrd_colors_count = count($rrd_colors);
$stdev_command = "rrdtool graph /dev/null ";
foreach ($data_sources as $index => $ds_name)
{
$stdev_command .= "DEF:serv$index=$rrd_path:$ds_name:AVERAGE ";
$stdev_command .= "VDEF:stdev$index=serv$index,STDEV PRINT:stdev$index:%lf ";
}
exec($stdev_command, $stdev_order, $ret);
if ($ret === 0)
{
array_shift($stdev_order); // remove first useless line "0x0" (may depend on your rrdtool version?)
asort($stdev_order); // sort by standard deviation keeping the indexes
}
else $stdev_order = $data_sources; // backup in case $stdev_command failed
$graph_command = "rrdtool graph $img_path ";
$graph_command .= "AREA:0 ";
foreach ($stdev_order as $index => $useless)
{
$ds_name = $data_sources[$index];
$graph_command .= "DEF:line$index=$rrd_path:$ds_name:AVERAGE ";
$graph_command .= "STACK:line$index" . $rrd_colors[$index%$rrd_colors_count].' ';
}
exec($graph_command, $out, $ret);
// check $ret (and $out) to see if all is good