0

これは、もう少し複雑ですが(またはそう思われますが)、ここでのこの質問の派生物です。

Gnuplotを使用してポイントカラーを条件付きでプロットする

これが取引です。2つの異なるファイルがあります。1つのファイルには最適なデータポイントがあり、1つのファイルには実行不可能で最適でないデータポイントがあります。

ファイルは前の質問と同じ形式ですが、後でまた投稿します。

私の目的は、インパルスを使用してすべてを1つの3D散布図にプロットすることです(おそらく)。

想像してみてください。Xvalue>18、Yvalue <20、Zvalue>65という制約があります。一般的な範囲はX= [0:22]、Y = [0:500]、Z = [0:85]です(最後の投稿)。

この基準を満たさないポイントは実行不可能であり、灰色でプロットする必要があります。この基準を満たしているが、non_optimal_file.datからのポイントは、赤でプロットする必要があります。そして最後に、optimal_data.datファイルにあるポイントは青でプロットする必要があります。言うまでもなく、これらのファイルのポイントは実行可能でなければなりません。

私は@andyrasのソリューションを使用していて、問題の最初の部分を解決することができました。しかし、他のファイルを同じプロットに組み込むと、すべてのポイントが灰色になりました。パレットなどを再定義しましたが、グレーと赤ではなく、青と赤で実行不可能で最適でないポイントを取得できました。最適なものを黒でプロットすることはできましたが、他の色を使用することはできません。誰かがこの問題のパレットを設定する方法を教えてもらえますか?

私はこれを使用しました:

定義されたパレットの設定(0 0 0 1、1 1 0 0、2 1 0 0)#(青、黄、赤)

 >splot 'data.dat' using 2:1:3:(isbig($2,$1,$3)) with points pt 8 palette notitle, \
 >      '' using (1e6):1:1 with points pt 8 lc rgb 'blue' title 'Optimal non-pareto', \
 >      '' using (1e6):1:1 with points pt 8 lc rgb 'red' title 'Non-optimal',    
 "./8_77_pareto_data.dat" u 2:1:3:(isbig($2,$1,$3)) w i lt 3 lc rgb 'black' t "Optimal 
 pareto"

データファイルは前の場合と同じ形式です。最初の3つの列を2:1:3の順序でX:Y:Zとして使用する必要があります。

サンプルデータ:最適なポイント:

20      10.078509647223639      50      172
46      10.395137748213685      43      18
34      10.1846571593967        33      18
74      11.054241806019         42      18
34      11.472806910917914      30      92

最適でない/実行不可能なポイント:

20      9.835854999471227       42      35
20      11.901179073913957      44      35
20      12.204287402540535      51      35
255     15.216006917180689      66      172
20      11.651167171495924      52      172
20      11.89284904845455       48      172

少し違うので、新しい質問を作成するように案内されました。したがって、分派。それが行われなかった場合はお詫び申し上げます。

4

1 に答える 1

1

OK、私は解決策を見つけたと思います(遅れてすみません)。

#!/usr/bin/env gnuplot

set terminal png
set output 'test.png'

# cutoffs for non-optimal points
bigx = 16; bigy = 400; bigz = 65
# big value to shift dummy points off of plot
shift = 1e6

# conditional for non-pareto
isbig(x,y,z) = (x > bigx || y > bigy || z > bigz) ? 1 : 0
# conditional for pareto
isbig2(x,y,z) = (x > bigx || y > bigy || z > bigz) ? 0 : 2

set palette defined (0 0.5 0.5 0.5,\
                     1 1.0 0.0 0.0,\
                     2 0.0 0.0 1.0) # (grey, red, blue)

unset colorbox

set xrange [0:20]; set yrange [0:500]; set zrange [0:100]

# plot commands for points use dummy points just to make key
# this is because there are multiple types of points coming from one file
splot 'data.dat' using 2:1:3:(isbig($2,$1,$3)) with points pt 7 palette notitle, \
      'optimal.dat' using 2:1:3:(isbig2($2,$1,$3)) with points pt 7 palette notitle, \
      '' using (shift):(1):(1) with points pt 7 lc rgb 'blue' title 'optimal non-pareto', \
      '' using (shift):(1):(1) with points pt 7 lc rgb '#888888' title 'optimal pareto', \
      '' using (shift):(1):(1) with points pt 7 lc rgb 'red' title 'non-optimal'

ここに画像の説明を入力してください

このスクリプトはあなたが説明したとおりに機能すると思います。最適か非最適かなどについてほとんど混乱しました。スクリプトが機能しなかった理由は、同じコンパレータ(isbig(x、y、z))を使用して3つの可能な結果を​​得ようとしたためだと思いますが、関数は2つだけを定義します。2番目のデータファイルで使用する2番目のコンパレータを定義しましたが、正常に機能しているようです。

于 2013-02-27T04:36:26.100 に答える