GNUPLOT: объединить ключевые записи с мультиплотом - PullRequest
0 голосов
/ 08 мая 2018

Я хотел бы нарисовать несколько столбцов данных файла данных на одном графике. Для каждого столбца данных я хотел бы использовать черную (по-разному пунктирную) линию и цветную точку. Я выяснил, как это сделать в целом (построив сначала линию (with lines), а затем точки (with points) и затем сместив записи легенды друг на друга). Это объясняется, например, в этом посте: Объединить ключевые записи в gnuplot

Но это не полностью работает в моем случае. У меня три проблемы:

Во-первых: я хотел бы иметь box вокруг легенды. Но это не работает, когда я перемещаю записи легенды друг на друга ...

Второе: я хотел бы включить rectangle object. Каким-то образом это всегда находится сверху намеченных линий, кроме последней ...

И третья проблема: xticlabels нанесены для каждого графика друг на друга. Вот почему они кажутся смелыми, чего не следует делать. Я обнаружил, что я должен «спрятать» tics (как я это делаю с border и labels), но это не работает для tics как-то ...

У вас есть намеки на меня? С наилучшими пожеланиями, Себастьян @ Ewcz

#dataset.dat
"\\footnotesize r/R"    "\\footnotesize OP1"    "\\footnotesize OP2"
0.132   1.018   0.872
0.162   0.940   0.796
0.191   1.014   0.848
0.221   1.043   0.934
0.250   1.010   0.935
0.279   0.987   0.938
0.309   0.962   0.930
0.338   0.929   0.921
0.368   0.897   0.922
0.397   0.876   0.932
0.426   0.831   0.919
0.456   0.795   0.884

#Start terminal
set terminal epslatex size 7.8cm, 6.1cm font ",10" 
#Legend settings
pointSize = 1
yticsScale =1
keySpacing = pointSize*yticsScale*1.25
keyY = 15.5
keyX = 0.975
set key vertical Left reverse width -0.5 height +0 font ",16"
set key opaque
set key autotitle columnheader
set key bottom right spacing -1
#Hide border & labels
set border 0
set xlabel " "
set ylabel " "
#Format of axis numbers
set format xy '$\%g$'
set format x '\footnotesize \%10.1f'
set format y '\footnotesize \%10.1f'
#Format tics
set xtics 0,0.1 out nomirror
set xtics offset -0.2,0
set mxtics 5
set ytics 0.6,0.1 out nomirror
set ytics offset 0.4,0
set mytics 5
#Background grid setting
set grid
show grid
set object 1 rectangle from 0.132, graph 0 to 0.456, graph 1 fillcolor rgb "#A9A9A9" fs pattern 1 noborder behind
#Margins
set lmargin 5.9
set rmargin 0.5
set bmargin 3.5
#Axis range settings
set xrange [0:0.535]
set yrange [0.6:1.2]
#Format lines, boxes...
set style line 4 lt 1 lc rgb 'black' lw 2 pt 13 ps 1.25 dt 4
set style line 5 lt 1 lc rgb 'black' lw 2 pt 4 ps 1.0 dt 5
#Multiplot
set multiplot
set origin 0,0
set size 1,1
#Plots
set key at graph keyX, character keyY
plot 'dataset.dat' using 1:2 with lines ls 4, \
'dataset.dat' using 1:2 with points ls 4 lc rgb "#71da71" title " "
#Label settings
set border
set xlabel '\small $r/D_T\;[-]$' offset 0,+0
set ylabel '\small $c_{m2} \cdot A_{T}/Q_T\;[-]$' offset +10.5,+0
#Last Plot
keyY = keyY - keySpacing
set key at graph keyX, character keyY
plot 'dataset.dat' using 1:3 with lines ls 5, \
'dataset.dat' using 1:3 with points ls 5 lc rgb "#4da6ff" title " "
#End of code
unset multiplot

1 Ответ

0 голосов
/ 08 мая 2018

Я бы предложил следующее:

  1. Поскольку ключи на обоих графиках независимы, возможно, наиболее простым решением было бы нарисовать охватывающую рамку вручную (см. Ниже) с помощью set object rectangle (хотя для этого может потребоваться ручная «подстройка» размера рамки ).
  2. Прямоугольник находится сверху нанесенных линий, поскольку он дублируется вторым графиком. В некотором смысле, эта вторая копия behind по отношению ко второму графику, но, поскольку этот слой находится поверх первого графика, он охватывает элементы, нанесенные первым plot. От этого можно избавиться, удалив объект в контексте второго графика с помощью unset object 1.
  3. Это аналогичная проблема с tics, labels и т. Д. В приведенном ниже коде все определения перемещаются перед первой командой plot, а затем unset относительно второго графика.

С этими модификациями скрипт будет выглядеть так:

#Start terminal
set terminal epslatex size 7.8cm, 6.1cm font ",10"

#Legend settings
pointSize = 1
yticsScale =1
keySpacing = pointSize*yticsScale*1.25
keyY = 15.5
keyX = 0.975
set key vertical Left reverse width -0.5 height +0 font ",16"
set key opaque
set key autotitle columnheader
set key bottom right spacing -1

#Format of axis numbers
set format xy '$\%g$'
set format x '\footnotesize \%10.1f'
set format y '\footnotesize \%10.1f'
#Format tics
set xtics 0,0.1 out nomirror
set xtics offset -0.2,0
set mxtics 5
set ytics 0.6,0.1 out nomirror
set ytics offset 0.4,0
set mytics 5
#Background grid setting
set grid
show grid
set object 1 rectangle from 0.132, graph 0 to 0.456, graph 1 fillcolor rgb "#A9A9A9" fs pattern 1 noborder behind
#Margins
set lmargin 5.9
set rmargin 0.5
set bmargin 3.5
#Axis range settings
set xrange [0:0.535]
set yrange [0.6:1.2]
#Format lines, boxes...
set style line 4 lt 1 lc rgb 'black' lw 2 pt 13 ps 1.25 dt 4
set style line 5 lt 1 lc rgb 'black' lw 2 pt 4 ps 1.0 dt 5
#Multiplot
set multiplot
set origin 0,0
set size 1,1
#Plots
set key at graph keyX, character keyY

#simulate key box
set object 2 rectangle from graph keyX, character keyY + 0.5*keySpacing to graph 0.65, character keyY - 1.5*keySpacing fillcolor rgb "#FFFFFF" fs pattern 2 border rgb "black"

set xlabel '\small $r/D_T\;[-]$' offset 0,+0
set ylabel '\small $c_{m2} \cdot A_{T}/Q_T\;[-]$' offset +10.5,+0

plot \
  'dataset.dat' using 1:2 with lines ls 4, \
  'dataset.dat' using 1:2 with points ls 4 lc rgb "#71da71" title " "

#unset these so that they are not duplicated by the following plot command
unset border
unset xtics
unset ytics
unset xlabel
unset ylabel

unset object 1
unset object 2

#Last Plot
keyY = keyY - keySpacing
set key at graph keyX, character keyY

plot \
  'dataset.dat' using 1:3 with lines ls 5, \
  'dataset.dat' using 1:3 with points ls 5 lc rgb "#4da6ff" title " "

Затем получится (я использовал standalone терминал epslatex. Возможно, это какая-то проблема со шрифтом, но кажется, что ylabel выиграет от немного большего горизонтального смещения):

enter image description here

...