私はこれを行うための gnuplot のみの方法を考え出しました。これには少し手間がかかり、おそらく特定の問題の詳細を微調整する必要があります。
例として、関数の値と、ゼロ次 ( ) から 3 次( ) までexp(x)
のテイラー展開を含むデータ ファイルを生成しました。この種のデータは、この問題に適しています。これは、すべての近似値が正確な値に収束する原点付近でデータ密度が高くなり、そこから離れるとデータ密度が低くなるためです。gnuplot を使用すると、次のように生成できます。T^(0)[exp(x)] = 1
T^(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
。つまり、データ スペースをグリッドに分割します。各要素は、によって測定され、それに等しい数値が割り当てられます。含まれるデータ ポイントの数。これらの要素が小さいほど、グラフの解像度が向上しますが、見栄えを良くするために必要なデータ ポイントも多くなります。上記の私のデータでは、これは次のようになりますy
xwidth
ywidth
xwidth
ywidth
xwidth = 0.02
ywidth = 0.05
次に、1D ビン ( details )を定義する関数を宣言します。
bin(x,width)=width*floor(x/width)+width/2.0
各方向に沿ってビンの数を定義します。xrange
for my data[0:1]
と myは [1:2.8] であるためyrange
、ビンの数はそれぞれ 50 と 36 になります。使用できますNx = xrange / xwidth
が、それは浮動小数点数につながるためNx
、整数が必要です。安全のために、次のことを行います。
Nx = 50
Ny = 36
これらの値を逆に定義する方が理にかなっています: calculate xwidth
as 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 次元でプロットするには、次のようにします。y
Ny
data
data2
y
color
x
every
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 倍の解像度を使用すると、以下のようになります。
