5

4 列のデータを含むファイルがあります。私は最初の 3 つだけを使用して 3D プロットをプロットしており、現在は 4 つ目は必要ありません。

特定の条件を満たす場合に点の色を変更する方法を知りたいです。たとえば、ポイントの値(x,y,z)が(16,400,65)より大きい場合、グレーでプロットしたいと思います。それ以下なら赤を使いたい。

私はawk同じものを使おうとしていますが、2つの点だけを別の色でプロットします。これが私のコードです。

gnuplot>splot "< awk '{if( ($2 > \"16\") || ($1 > \"400\") || ($3 > \"65\"))  print}'                                       
./8_77_non_pareto_data.dat " u 2:1:3 w p pt 8 lc rgb "grey", \
"< awk '{if( ($2 < \"16\") || ($1 < \"400\") || ($3 < \"65\"))  print}' 
./8_77_non_pareto_data.dat " u 2:1:3 w p pt 8 lc rgb "red", \
"./8_77_pareto_data.dat" u 2:1:3 w i lt 1 lc rgb "blue" t "Pareto points"

私のデータファイルは次のようになります。

48      15.057599573464184      68      361
93      14.950459657063462      73      361
48      14.065204842090914      69      361
280     13.16320458043516       69      361
120     15.05281009307949       66      361
48      15.133322961840786      59      361
48      16.161631503473544      73      361
470     17.763180586730847      77      361

X 軸の範囲は 6 から 22 です。

Y 軸の範囲は 0 ~ 500 です。

Z 軸の範囲は 35 ~ 85 です。

これを(16,400,65)の周りに 3 次元のバウンディング ボックスがあると視覚化したいと思います。ボックスの内側は赤、外側は灰色です。

誰かがここで私を助けてくれることを願っています。

PS : 青い点は問題なく印刷されています。ここでのサンプル データでは一部の条件が満たされていませんが、その条件を満たす点があります。ここにファイル全体を投稿しませんでした。

4

1 に答える 1

5

単純な関数を定義することで、awk の労力をいくらか削減し、純粋な gnuplot で実行できます。

#!/usr/bin/env gnuplot

set terminal png set output 'test.png'

bigx = 16; bigy = 400; bigz = 65

isbig(x,y,z) = (x > bigx || y > bigy || z > bigz) ? 1 : 0

set palette defined (0 0.5 0.5 0.5, 1 1 0 0) # (grey, red)

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

splot 'data.dat' using 2:1:3:(isbig($2,$1,$3)) with points pt 7 palette notitle, \
      '' using (1e6):1:1 with points pt 7 lc rgb '#888888' title 'in box', \
      '' using (1e6):1:1 with points pt 7 lc rgb 'red' title 'not in box'

(範囲を設定する行とカラーボックスを設定解除する行、および 2 つの追加のプロット コマンドは、私の意見では物事をきれいにするためのものです。気を散らすカラーボックスなしで、2 つの色が何を意味するかを説明するキーを提供します。)

ここに画像の説明を入力

于 2013-02-21T03:16:38.420 に答える