gnuplot直方图中整列的问题为零

时间:2012-11-16 18:51:37

标签: undefined gnuplot histogram

我使用gnuplot创建堆积直方图。今天,第一次,其中一列中的所有数据点都为零。这为gnuplot带来了问题,因为它现在报告:

  

直方图中的所有点未完成

这是因为我的"使用"声明具有如下逻辑:

  

使用($ 6> 0:$ 6:NaN)

当整个列由忽略的值组成时,gnuplot会阻塞。是否有一个设置我可以使用gnuplot它应该忽略这个特殊的,无害的问题?有时列将为零,这是数据中的有效条件。我希望gnuplot能够处理这个问题。

如果我无法使用gnuplot处理它,我可能不得不使用命令以不同的方式发布我的绘图以省略丢失的数据集。除非必要,否则我真的不愿意做出这样的改变。

有人有任何建议吗?

编辑(添加plotscript和数据文件):

plotscript和data文件是在运行时生成的,使用模板文件和脚本逻辑的组合来确定最终脚本。通过打开gnuplot命令的命令pipline并将脚本直接提供给gnuplot,直接将其提供给gnuplot。

今天出现此问题,因为图表中的第6列今天全部为零。这是一件好事(没有图像花费超过60分钟来处理)。我希望gnuplot能够简单地抑制零值(根据plotscript中' plot'行中的三元运算符),如果所有值都被抑制,那么直方图的那一列就没有数据。正常和预期;除了gnuplot不喜欢它。

Plotscript:

set terminal 'pngcairo'
set key center under horizontal font ",8"
set style data histogram
set style histogram rowstacked
set style fill  solid 1.0
set boxwidth 0.5 relative
set xtics border in scale 0.5,0.25 nomirror rotate by 45  font ",8" offset character -2, -1, 0 right
set xtics autofreq  norangelimit
set ytics border in scale 0.5,0.25 nomirror norotate  font ",8" offset character 0, 0, 0 autojustify
set ytics autofreq  norangelimit
set y2tics border in scale 0.5,0.25 nomirror norotate  font ",8" offset character 0, 0, 0 autojustify
set y2tics 1800  norangelimit
set my2tics 6
set title "Image Processing Trends"
set title  offset character 0, 0, 0 font ",18" norotate
set timestamp "" bottom offset character 0,-2,0
unset xlabel
set ylabel "Nbr of Images (bars)"
set ylabel  offset character 2, 0, 0 font ",8" textcolor lt -1 rotate by -270
set y2label "Avg Time in Seconds (line)"
set y2label  offset character 0, 0, 0 font ",8" textcolor lt -1 rotate by -270
set zero 1e-08
set label "Generated by Luna" font ",6" tc rgb "#808080" at graph 1,-0.25 right
plot 'datafile' using (sum [i=2:4] column(i)):xtic(1) title "< 15 min" lc rgb "#00FF50", '' using ($5>0?$5:NaN) title columnhead lc rgb "#F0F000", '' using ($6>0?$6:NaN) title columnhead lc rgb "#FF0000"


Datafile:
"Date" "< 5 min" "5 - 10 min" "10 - 15 min" "15 - 60 min" "> 60 min" "Avg ET"
  2012-10-26  1099    71    23     0     0   184
  2012-10-29    16     0     0     0     0    81
  2012-10-30     5     0     0     0     0    76
  2012-10-31   650    41    24    19     0   176
  2012-11-01   831   118    11     0     0   169
  2012-11-02   671   158   195    91     0   353
  2012-11-05   887   127    64    81     0   287
  2012-11-06  1343    35     8     0     0   139
  2012-11-07  1018   233   201   112     0   334
  2012-11-08  1140   433   143    16     0   271
  2012-11-09  1192   115    15     0     0   168
  2012-11-12  1008    90    17     1     0   173
  2012-11-13   911    62     5     0     0   160
  2012-11-14  1066   346   219    68     0   317
  2012-11-15   754   110     0     0     0   170

1 个答案:

答案 0 :(得分:1)

我发现由于某种原因gnuplot处理不同的NaN1/0,数学上未定义的表达式默默地忽略(参见例如注释{{3 }})。在您的逻辑中使用NaN为您的列6全部为零将产生错误

 "<scriptname>", line xx: All points in histogram UNDEFINED

和一个空的png文件。游民。但是,逻辑中的1/0只会产生警告

 "<scriptname>", line xx: warning: Skipping data file with no valid points

它将生成包含其余数据的图。由于它正在完全跳过数据集,因此“> 60分钟”也不会出现在图例中,您可能需要这样做。

所以只需更改第6列的逻辑(如果它变为零,则为5)

plot 'datafile' using (sum [i=2:4] column(i)):xtic(1) title "< 15 min" lc rgb "#00FF50", '' using ($5>0?$5:1/0) title columnhead lc rgb "#F0F000", '' using ($6>0?$6:1/0) title columnhead lc rgb "#FF0000"

除了警告消息,通知您没有数据要绘制> 60分钟(我们知道开始),这应该有效。

我使用了gnuplot v4.6 patchlevel 0。