палитра gnuplot для трехмерной поверхности ошибок splot: симметричные цвета

Я строю 3D-поверхность (у меня есть значения z на матрице 8x10 в текстовом файле); Значения z представляют ошибку, поэтому она идет, например. от -20% до +10%. Я хотел бы изобразить это с помощью цветов симметрично, что означает, например. -10% должен иметь ту же интенсивность красного, что и +10%. Значение около 0% (очень маленькие ошибки) должно быть зеленым (или синим или любым другим). Таким образом, чем интенсивнее красный цвет, тем больше ошибка (независимо от того, положительная она или отрицательная). Я рисую, используя:

# line styles
set style line 1 lc rgb '#B2182B' # red
set style line 2 lc rgb '#D6604D' # red-orange
set style line 3 lc rgb '#F4A582' # 
set style line 4 lc rgb '#FDDBC7' # pale orange
set style line 5 lc rgb '#D1E5F0' # pale blue
set style line 6 lc rgb '#92C5DE' # 
set style line 7 lc rgb '#4393C3' # medium blue
set style line 8 lc rgb '#2166AC' # dark blue
# palette
set palette defined ( 0 '#B2182B',\
                      1 '#D6604D',\
              2 '#F4A582',\
              3 '#FDDBC7',\
              4 '#D1E5F0',\
              5 '#92C5DE',\
              6 '#4393C3',\
              7 '#2166AC' )
set dgrid3d 30,30 gauss 1
splot 'file.csv' matrix using 1:2:3 with lines palette title 'Error (%)'

Стили линий и палитру я взял у ColorBrewer RdBu. Я также пытался центрировать вокруг нуля, используя stats и set cbrange, но безуспешно.


person rob    schedule 25.06.2020    source источник


Ответы (1)


без успеха недостаточно описания для отладки. Это должно работать, чтобы дать желаемый симметричный диапазон, поскольку команда set cbrange [-foo : foo]". The numeric values given in the set палитры не важна, пока они симметричны. Вот пример

set palette defined (-1 "dark-red", 0 "grey90", 1 "dark-red")
set cbrange [-15 : 15]
set xyplane at 0
splot besj0(y)*x*x with pm3d

введите здесь описание изображения

person Ethan    schedule 25.06.2020
comment
Спасибо Итан, это сработало! Я сделал так: stats 'file.csv' matrix using 3 nooutput\cb_val = (abs(STATS_min - 0) < abs(STATS_max - 0) ? abs(STATS_max - 0) : abs(STATS_min - 0))\set cbrange [0 - cb_val : 0 + cb_val]\set palette defined (-cb_val 'dark-red', -cb_val+STATS_stddev '#D6604D', -cb_val+2.0*STATS_stddev '#FDDBC7', -cb_val+3.0*STATS_stddev '#4393C3', 0 '#2166AC', +cb_val-3.0*STATS_stddev '#4393C3', +cb_val-2.0*STATS_stddev '#FDDBC7', +cb_val-STATS_stddev '#D6604D', cb_val 'dark-red')\splot 'file.csv' matrix using 1:2:3 with lines palette title 'Error (%)' - person rob; 26.06.2020