1

0 から 1 までのパレットで色が定義されている点を含むデータ ファイルをプロットしています。色はファイルの列の値を参照します。「青」のさまざまな色合いのパレットを割り当てます。

設定 cbrange [0:1]

定義されたパレットを設定 (1 "#B0E2FF"、2 "#87CEFA"、3 "#7EC0EE"、4 "#4F94CD"、5 "#4E78A0"、6 "#104E8B"、7 "#1B3F8B"、8 "#162252 ")

問題は、パレットの色が直線的に配置されることです。したがって、私のデータではこれは良くありません。値の中間範囲 (大きなカラー ビン) では精度を上げ、極値 (小さなカラー ビン) では精度を低くしたいと考えています。

対数スケールでパレットを使用できることがわかりました。

ログCBを設定

しかし、私が望むものを考えると、これはもちろん私にとっても良いことではありません。パレット内のスペース値に自己定義関数を適用する必要があります。それは可能ですか?

4

1 に答える 1

1

これは、3 つの関数に関して定義されたパレットがある場合、またはパレット値を保持するデータ ファイルがある場合に可能です。

グレー範囲からマッピングして拡大/縮小するマッピング関数map(x)(つまり、自己定義関数) があるとします。[0:1] -> [0:1]次に、次を使用できます。

red(x) = ...
green(x) = ...
blue(x) = ...
map(x) = ...
set palette functions red(map(gray)), green(map(gray)), blue(map(gray))

それに応じて、ファイルの場合:

map(x) = ...
set palette file 'palette.dat' using (map($1)):2:3:4

あなたの場合、次のことができます:

  1. 必要に応じてパレットを定義します (例: set palette defined ...)
  2. パレットを外部データ ファイルに書き込みます。これにより、「赤」、「緑」、「青」、および NTSC グレー値用に 1 つのデータ セットが書き込まれます。
  3. に役立つようにデータ ファイルを再配置しますset palette file。ここでは、次の python スクリプトを使用しますpalette.py

    import numpy as np
    import sys
    
    A = np.loadtxt(sys.stdin, usecols=(0,1))
    np.savetxt(sys.stdout, A.reshape(256,8, order='F')[:,(0,4,5,6,7)], fmt='%.3f')
    
  4. 適切な関数を定義しmap(x)ます。

スクリプトは次のとおりです。

# 1.
set palette defined (1 "#B0E2FF", 2 "#87CEFA", 3 "#7EC0EE", 4 "#4F94CD", 5 "#4E78A0", 6 "#104E8B", 7 "#1B3F8B", 8 "#162252")

# 2.
set terminal push
set terminal unknown
set table 'palette.tmp'
test palette
unset table
set terminal pop

# 3.
system('python palette.py < palette.tmp > palette.dat')

# 4.
map(x) = (-0.5+(2*(x-0.5))**3 + x)/3 + 0.5
set palette file 'palette.dat' using (map($1)):2:3:4

test palette
于 2013-11-03T14:25:05.053 に答える