Замена слоев объекта с помощью клавиши «front» в gnuplot

#gnuplot

#gnuplot

Вопрос:

Я избегаю длинных и очень скучных собственных кодов и сосредотачиваюсь только на том, что имеет значение. Я создаю, используя две строки

 set arrow from xarr_1, yarr_1 to xarr_2, yarr_2 nohead lc 'white' lw 2 front
set object circle at xarr_2, yarr_2 size screen 0.01 fc rgb "black" fillstyle solid 1.0 front 
 

черный круг и белая зона (представляющая собой набор стрелок) на следующих рисунках (достаточно только одной)
Изображение, представляющее два распределения и их средние позиции. Белая зона - это зона, покрытая белым цветом во время эволюции наших распределений, а черная - текущее среднее положение.
Поскольку для обоих объектов: стрелки и круга я использую клавишу front , чтобы поместить их перед plot командой, я бы хотел, чтобы теперь черный объект находился перед стрелками «белая зона».

Как я могу это сделать?

PS: та же проблема возникает с этим упрощенным кодом независимо от того, меняете ли вы команды местами

 reset session 
reset
PI = 4.*atan(1.)
set xrange [-PI:PI]
set arrow from -0.1, 0.1 to 0.1, -0.1 lc 'black' lw 2 front 
set object circle at 0, 0 radius 0.1 fillstyle solid 1.0 fc rgb 'red' front 
plot  sin(x) w l 
pause -1 
 

Ответ №1:

Если вы проверите руководство gnuplot ( help layers ), то увидите определенный порядок рисования объектов: стрелки перед надписями перед объектами (прямоугольниками, кругами, эллипсами, полигонами). Насколько я понимаю, вы не можете нарисовать круг перед стрелкой, если вы не используете multiplot. Если я правильно понял ваш вопрос, вы хотите поместить круг перед стрелкой. Итак, вам, вероятно, придется использовать multiplot.

Что-то вроде этого:

 ### plot circle in front of an arrow
reset session

set obj 999 rect from graph 0, graph 0 to graph 1, graph 1 fc rgb "black" behind
set print $Data   # create some random data
do for [i=1:1000] { print sprintf("%g %g", invnorm(rand(0)), invnorm(rand(0)))}
set print

set xrange[-3:3]
set yrange[-3:3]
set multiplot
    set arrow 1 from -1,1 to 1,-1 lc 'white' lw 3
    plot $Data u 1:2 w p pt 7 ps 1 lc rgb "red"

    set object 1 circle at 0,0 radius 0.5 fillstyle solid 1.0 fc rgb 'blue' front
    unset obj 999 # don't use the black background again
    plot -10 not  # plot some dummy out of range
unset multiplot
### end of code
 

Дает что-то вроде этого:

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