Замена слоев объекта с помощью клавиши `front` в gnuplot - PullRequest
1 голос
/ 18 апреля 2019

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

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 

черный круг и белую зону (которая представляет собой кучу стрелок) на следующих рисунках (достаточно только одной) Image representing two distribution and their mean positions. The white zone is the zone covered by the white during the evolution of our distributions and the black is the current mean position. Так как наоба объекта: стрелка и круг, я использую клавишу 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 Ответ

2 голосов
/ 19 апреля 2019

Если вы проверяете руководство по gnuplot (help layers), существует определенный порядок рисования объектов: стрелки перед метками перед объектами (прямоугольники, круги, эллипсы, многоугольники).Как я понимаю, вы не можете нарисовать круг перед стрелкой, если вы не используете мультиплот.Если я правильно понял ваш вопрос, вы хотите поместить кружок перед стрелкой.Итак, вам, вероятно, придется использовать 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

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

enter image description here

...