3

gnuplot を使用して積み上げヒストグラムを作成しています。今日、初めて、いずれかの列のすべてのデータ ポイントがゼロになりました。これにより、gnuplot で問題が発生し、次のように報告されます。

ヒストグラムのすべてのポイント UNDEFINED

これは、私の「using」ステートメントには次のようなロジックがあるためです。

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

列全体が無視された値で構成されている場合、gnuplot はチョークします。gnuplot がこの特定の無害な問題を無視できるようにするために使用できる設定はありますか? 列がゼロになる場合がありますが、これはデータの有効な条件です。gnuplot でこれを処理できるようにしたいと思います。

gnuplot で処理できない場合は、別のコマンドを使用してプロットを発行し、欠落しているデータセットを省略しなければならない場合があります。必要がない限り、この変更を行いたくありません。

誰か提案はありますか?

編集(プロットスクリプトとデータファイルの追加):

プロット スクリプトとデータ ファイルは実行時に生成され、テンプレート ファイルとスクリプト ロジックを組み合わせて最終的なスクリプトを決定します。これは、コマンド pipline を gnuplot コマンドに開き、スクリプトを直接 gnuplot に供給することによって、gnuplot に直接供給されます。

今日、グラフの列 6 がすべてゼロであるため、この問題が発生します。これは良いことです (処理に 60 分以上かかった画像はありません)。私は、gnuplot が (プロットスクリプトの「プロット」行の三項演算子に従って) ゼロ値を単純に抑制することを期待します。すべての値が抑制されている場合、ヒストグラムのその列のデータはありません。正常であり、予想されます。ただし、gnuplot はそれを好みません。

あらすじ:

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
4

1 に答える 1

1

なんらかの理由でgnuplotの扱いが異なりNaN1/0数学的に定義されていない式が黙って無視されることがわかりました(たとえば、ここの注釈を参照してください)。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分」は表示されません。

したがって、plotコマンドの列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分を超えてプロットするデータがないことを通知する警告メッセージ(最初から知っている)を除いて、これは機能するはずです。

gnuplotv4.6パッチレベル0を使用しました。

于 2012-12-30T01:12:48.323 に答える