2

1000 以上の曲線をプロットし、gnuplot でアイ ダイアグラムを表示したいと考えています。

matlab を使用したアイ ダイアグラムの例: http://www.mathworks.fr/fr/help/comm/ref/commscope.eyediagram.html

以下のスクリプトを使用して、すでに曲線をプロットできます。

gnuplot> plot for [col=1:1000] 'input_dataset1.txt' using 0:col with lines linecolor rgb("#0000ff")

結果: output_image.png 私の問題は、2 つの線が交差すると、交差部分が線と同じ色になることです。アイ ダイアグラムは、多くの交差点がある領域を別の色で表示する必要があります。

gnuplot で作成されたそのような図の例は見つかりませんでした。

線の透明度をいじってもうまくいきませんでした: 2 つの半透明の線の交点は、線と同じ色です。

何か案は ?

ありがとう、

4

1 に答える 1

1

私はこれを行うための gnuplot のみの方法を考え出しました。これには少し手間がかかり、おそらく特定の問題の詳細を微調整する必要があります。

例として、関数の値と、ゼロ次 ( ) から 3 次( ) までexp(x)のテイラー展開を含むデータ ファイルを生成しました。この種のデータは、この問題に適しています。これは、すべての近似値が正確な値に収束する原点付近でデータ密度が高くなり、そこから離れるとデータ密度が低くなるためです。gnuplot を使用すると、次のように生成できます。T^(0)[exp(x)] = 1T^(3)[exp(x)] = 1 + x + x**2/2. + x**3/6.

set xrange [0:1]
set table
set output "| grep -v '^$' > data"
plot exp(x), 1, 1+x, 1+x+x**2/2., 1+x+x**2/2.+x**3/6.
unset table ; unset output

データファイルに空白行がないように出力をフォーマットしていることに注意してください。そうしないと、gnuplot は空白行で区切られたフィールドを異なるデータブロックとして扱い、最終的に以下のヒストグラムを台無しにします。このデータは次のようになります ( plot "data"):

ここに画像の説明を入力

次に、このデータを使用して 2D ヒストグラムを作成します。gnuplot がこの機能を提供していれば非常に便利ですが、提供されていないため、作業が少し難しくなります。私がすることは、いくつかの 1D ヒストグラムを作成することです。後者を生成する方法の詳細については、これを確認してください。

最初に、データ ポイントの数がカウントされるビン および の幅を計算しますx。つまり、データ スペースをグリッドに分割します。各要素は、によって測定され、それに等しい数値が割り当てられます。含まれるデータ ポイントの数。これらの要素が小さいほど、グラフの解像度が向上しますが、見栄えを良くするために必要なデータ ポイントも多くなります。上記の私のデータでは、これは次のようになりますyxwidthywidthxwidthywidth

xwidth = 0.02
ywidth = 0.05

次に、1D ビン ( details )を定義する関数を宣言します。

bin(x,width)=width*floor(x/width)+width/2.0

各方向に沿ってビンの数を定義します。xrangefor my data[0:1]と myは [1:2.8] であるためyrange、ビンの数はそれぞれ 50 と 36 になります。使用できますNx = xrange / xwidthが、それは浮動小数点数につながるためNx、整数が必要です。安全のために、次のことを行います。

Nx = 50
Ny = 36

これらの値を逆に定義する方が理にかなっています: calculate xwidthas xrange / Nx。この場合、integer/float で問題は発生しません。

ここで、値yをループしてに沿って 1D ヒストグラムを生成します。x

set output "| grep -v 'u\\|^$' | sed 's/#/\\n#/g' > data2"
set table
plot for [i=0:(Nx-1)] "./data" using \
(bin($2,ywidth)):( i*xwidth <= $1 && (i+1.)*xwidth > $1 ? 1.0 : 0.0) \
smooth freq
unset table ; unset output

現在、データのブロックがdata2含まれており、それぞれがデータ ポイントと共にNxスキャンされています。これらのデータ ポイントの値は、元のファイルのデータ エントリの数です。そのままでは、3D に再マッピングする必要がある2D データ ( 、 ) が含まれています。値はデータブロックの位置によって与えられ、gnuplot のオプションでアクセスできます。これを 3 次元でプロットするには、次のようにします。yNydatadata2ycolorxevery

set output "| grep -v 'u\\|^$' | sed 's/#/\\n#/g' > data3"
set table
splot for [i=0:(Nx-1)] "./data2" every :::i::i using \
((i+0.5)*xwidth):1:2
unset table ; unset output

これdata3をカラー マップとしてプロットできるようになりました。

plot "./data3" with image

次のようになります。

ここに画像の説明を入力

より高品質のデータ (つまり、より高い解像度) を使用した場合、グラフは見栄えがよくなります。各方向に沿って 2 倍の解像度を使用すると、以下のようになります。

ここに画像の説明を入力

于 2014-05-05T16:37:05.253 に答える