如何通过标准偏差绘制RRD可堆叠数据以最大化可读性

时间:2012-12-19 18:06:26

标签: graph rrdtool

这是一个非常具体的用途,但它可以派上用场。

想象一下,你有一个不同的堆栈值,一些数据变化很大,一些数据几乎不变。 如果使用默认顺序并且变量数据堆叠在常量数据下,则变量数据将使常量数据具有非常可变的基数。 因此,如果您首先在底部堆叠较少变量的数据,它可能有所帮助。

示例:这两个图表显示了如何通过堆叠移动较少的较深数据来提高可读性,即具有较小的标准偏差。

Default graphing doesn't help readibility
默认图表可能导致可读性差

Improved readibility when sorting by standard deviation
按标准差排序时提高了可读性

1 个答案:

答案 0 :(得分:1)

  1. 使用rrdtool graphPRINT命令获取数据源的标准偏差(stdev_array
  2. 排序stdev_array
  3. stdev_array
  4. 的顺序堆叠图表

    这是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