Сначала простой ответ: при двумерной выборке, автоматически из splot
или явно из plot '++'
, количество выборок в первом измерении контролируется set sample
, а количество выборок во втором. размер контролируется set isosample
.
Теперь посложнее. В версиях gnuplot до текущей версии 5.2.8 вы не можете добавить прозрачность непосредственно в палитру. Однако вы можете выполнить go с помощью многоэтапного процесса сохранения палитры в файл или блок данных, а затем считывать ее обратно как массив цветов RGB. Когда у вас есть этот массив, вы можете добавить значение альфа-канала, чтобы он также выражал прозрачность. Я покажу этот процесс, используя блок данных, созданный командой test palette
. В более старых версиях gnuplot вам, возможно, придется вместо этого использовать файл, созданный set print "palette.save"; show palette palette 256;
.
# save current palette to a datablock as a list of 256 RGB colors, one per line
set palette defined (0 "blue", 1 "green", 2 "red")
test palette
# print one line to show the format (cbval R G B NTSCval)
print $PALETTE[4]
# Create an array of packed RGB values
array RGB[256]
do for [i=1:256] {
Red = int(255. * word($PALETTE[i],2))
Green = int(255. * word($PALETTE[i],3))
Blue = int(255. * word($PALETTE[i],4))
RGB[i] = Red << 16 | Green << 8 | Blue
}
# Sample from '++' are generated to span ranges on the u and v axes
# I choose 1:256 so that the y coordinates match the range of array indices
set sample 50
set isosample 50
set urange [1:256]
set vrange [1:256]
set xrange [*:*] noextend
set yrange [*:*] noextend
# Now you can use colors stored in the array via colorspec `rgb variable`
# which will also accept an alpha channel in the high bits
plot "++" using 1:2:(RGB[int($2)]) with points pt 5 lc rgb variable
# The final step is to add an alpha channel as a function of y
# Here I go from opaque (Alpha = 0) to 50% transparent (Alpha = 127)
# This works because I know y will run from 1-256
ARGB(y) = RGB[int(y)] + (int(y/2)<<24)
plot "++" using 1:2:(ARGB($2)) with points pt 5 lc rgb variable
Результат, показанный ниже.
Требуемая последовательность команд, как видите, беспорядочная. В следующем выпуске gnuplot (5.4) это будет намного проще. В новой версии будет палитра функций (z), которая преобразует текущую палитру непосредственно в упакованное значение RGB. Обратите внимание, что функции palette () нет в тестовой версии -rc1, но она будет в -rc2. Таким образом, в версии 5.4 все манипуляции с палитрой / массивом / RGB можно заменить на
plot '++' using 1:2:(palette($2) + (int($2)<<24)) with points pt 5 lc rgb variable