4

カラーマップを作成する必要があり、「画像付き」のプロットスタイルはまさに私が望むものです。(位置x、yでzの正確な値をプロットするため、pm3dを使用することは私にとってオプションではありません)

問題は、データファイルに未定義のポイントがあることです。たとえば、関数は質量比を表しているため、負の z 値には物理的な意味がなく、省略したいと思います。または、一部の z 値は "NaN" です。

データファイルの例:

1.0   1.0    1.5
1.0   2.0    1.7
1.0   3.0    1.9
2.0   1.0    1.6
2.0   2.0    1.8
2.0   3.0    2.0
3.0   1.0    1.7
3.0   2.0    1.9
3.0   3.0   -1.0

したがって、位置 (3,3) に値 -1 をプロットしたくはありませんが、(3,3) のピクセルは空白のままにします。

私はこれを試しました:

plot './test.dat' u 1:2:($3>0 ? $3 : 1/0) with image

しかし、うまくいきません。それは言います:

警告: グリッドに一致する整数にピクセル数を因数分解することはできません。N = 8 K = 3

set datafile missing "NaN"

-1.0 が「NaN」に置き換えられた場合も機能しません。

私が見つけた唯一の代替手段は次のとおりです。

set pointsize 10
plot './test.dat' u 1:2:($3>0 ? $3 : 1/0) palette pt 5

しかし、データポイントのスペースやオーバーラップがないように、すべてのプロットのポイントサイズ、x および y 範囲、プロット サイズを手動で調整する必要があります。(この質問を参照してください。)

簡単に言うと、未定義/欠落したデータポイントで「画像付き」プロットスタイルを使用し、このポイントを白のままにする方法はありますか?

4

1 に答える 1

2

この場合、gnuplotがNaNをうまく処理する方法を見つけられませんでした。私にとっては1に設定されています。これは奇妙に思えますが、「plot...withimage」が欠落データを処理する方法の特徴である可能性があります。

負の数だけを削除したい場合に使用できるトリックが1つあります。

#!/usr/bin/env gnuplot

set terminal png 
set output 'test.png'

filter(x) = (x > 0) ? x : 1/0 
philter(x) = (x > 0) ? x : 0 

# just in case
set zero 1e-20

# make points set to zero be white
set palette defined (0 1.0 1.0 1.0, \
                 1e-19 0.0 0.0 1.0, \
                     1 1.0 0.0 0.0)

# get min/max for setting color range
stats 'test.dat' u (filter($3)) nooutput

# set color range so minimum value is not plotted as white
set cbrange [STATS_min*(1-1e-6):STATS_max]

plot './test.dat' u 1:2:(philter($3)) with image

データファイルで、次のプロットが生成されます。 ここに画像の説明を入力してください

カラーバーの下部に白いビットがあり、NaNを処理しないため、これはあまり理想的ではありません。白いビットを取り除くことができない理由は、パレットを設定するときに、使用される数値がカラーバーに合わせて自動スケーリングされ、パレットに個別の数のスロットがあるためです(256?)。したがって、パレットの次の色がスケールの1e-19に表示されるかどうかに関係なく、パレットの最初のスロットには常にパレットの開始値(白)が表示されます。

于 2013-01-09T15:31:07.463 に答える