Я делал двумерные графики шаблонов с помощью GNUPLOT, но мне нужно, чтобы цвет был в логарифмической шкале, но только цвет, а не числовые значения и соответствующие им тики в столбце цвета. Есть ли способ сделать это?
Вот пример одного файла данных для генерации изображения. В GNUPLOT я использую следующие команды (или скрипт):
set size square 1,1
set cbrange [0:2]
set pm3d map
set palette defined ( 0 'gray30', 0.75 'gray20', 1.35 'cyan')
splot 'Sq.dat' with pm3d
Это был просто пример, а не реальная попытка с логарифмической шкалой. Я бы хотел логарифмический «градиент» только с одним цветом, если это возможно. Я предположил, что, если это возможно, черный будет иметь самые низкие значения, а «полный» голубой — самые высокие. Значения 0, 0,75 и 1,35 относятся к диапазону [0,2] в этом примере, они являются случайным выбором значений, чтобы попытаться построить градиент с тремя цветами, которые сохраняют детали на самых низких значениях.
Почему вы не хотите использовать set logscale cb
? Если у вас есть определенный цвет на графике, вы хотите найти его на цветовой шкале, которая, конечно же, имеет логарифмические тики.
В консоли gnuplot отметьте help palette
и help palette functions
.
Есть вариант functions
. Для каждого из цветовых компонентов (R, G, B) вы определяете функцию, которая имеет переменную gray
в качестве входных данных (диапазон [0:1]
) и должна иметь диапазон [0:1]
в качестве выходных данных. Если вы наберете test palette
, вы можете проверить вывод палитры.
Если все ваши функции для R, G, B начинаются с 0
, это будет черный цвет. Если функции для G и B заканчиваются на 1
, а R остается на 0
, это будет голубым.
Также есть 37 предопределенных функций при использовании опции set palette rgbformulae
: отметьте help palette rgbformulae
и show palette rgbformulae
.
Примеры:
# Linear:
set palette functions 0, gray, gray
test palette
# Square:
set palette functions 0, gray**2, gray**2
test palette
# Square Root:
set palette functions 0, sqrt(gray), sqrt(gray)
test palette
# Some logarithm: (play with x0)
f(x,x0) = log((x+x0)/x0)/log((1+x0)/x0)
x0 = 0.01
set palette functions 0, f(gray,x0), f(gray,x0)
test palette
Дополнение: (ваши данные с logscale cb
)
Скрипт:
### logscale cb
reset session
FILE = "SO76096868.dat"
set size ratio -1
set palette functions 0, gray**2, gray**2
# set palette rgbformulae 33,13,10 # alternatively, multiple colors
set view map
set logscale cb
set format cb "10^{%T}"
set xrange [:] noextend
set yrange [:] noextend
splot FILE u 1:2:3 w pm3d
### end of script
Полученные результаты:
Ваши данные варьируются от 0 (и 6,5e-6 как наименьшее значение> 0) до 144. Как именно вы хотите сопоставить этот диапазон с цветом? Должны ли 6.5e-6 соответствовать «серому30», а 144 — «голубому» с логарифмическим переходом? А как насчет более темного серого 20 между ними? Откуда берутся значения 0, 0,75 и 1,35 в вашей определенной палитре?