gnuplot multiplot равная высота каждого графика

#plot #gnuplot #height #equals

#график #gnuplot #высота #равно

Вопрос:

я хочу создать gnuplot multiplot с тремя графиками друг над другом. это работало до сих пор, когда я не добавлял метку оси x и не устанавливал все tmargin и bmargin равными. но когда я добавляю метку оси x и xtics под самым низким графиком, этот график уменьшается по высоте, как показано на рисунке. у вас есть идея, как создавать графики одинакового размера с меткой по оси x под самым низким графиком? введите описание изображения здесь

это мой код:

 reset

set lmargin 9
set rmargin 3
unset key

set xrange [-1:41]

set boxwidth 0.4
set style fill solid noborder

set multiplot layout 3,1

set xtics format ""
set xtics 5
unset xlabel
set ytics 100
set logscale y
set format y "10^{%L}"

set key ins vert right top
set tmargin 0.8
set bmargin 0.5
set yrange [1:100000000]
#set ylabel "Photonen / s  [Mio.]" offset 0,0,0 font ""
plot "300sLinienMit0.txt" u (($1)):($2/300) w boxes lc rgb "#6699ff" title "185,72 keV"

set xtics format ""
unset xlabel

set ytics 10
set tmargin 0.5
set bmargin 0.5
set yrange [1:1000]
set ylabel "Photonen [s^{-1}]" offset -2,0,0 font ""
plot "300sLinienMit0.txt" u ($1):($3/300) w boxes lc rgb "#ff6600" title "351,03 keV"
unset ylabel

set xtics format ""
unset xlabel

set tmargin 0.5
set yrange [1:1000]
set format x "%g"

set xtics 5 offset 0,0,0
set bmargin 3.5
set xlabel "Blei-Abschirmung [mm]" offset 0,0,0 font "" 
#set ylabel "Photonen / s  [Tsd.]" offset 0,0,0 font ""
plot "300sLinienMit0.txt" u ($1):($4/300) w boxes lc -1 title "831,98 keV"

unset multiplot
  

Ответ №1:

Вы должны самостоятельно устанавливать положения и размеры ваших (вспомогательных) графиков в среде multiplot. Важно set bmargin 0 . Поле нижнего графика, которое вы задаете через set origin 0, myBottomMargin . А затем соответствующим образом установите происхождение и размеры других графиков. Я надеюсь, что следующий код не требует объяснений.

Код:

 ### multiplot with equal plot heights
reset session

myBottomMargin = 0.15
myPlotHeight = (1. - myBottomMargin)/3

set multiplot

    set xlabel "This is the xlabel for all plots"
    set ytics 0.5
    set grid xtics, ytics
    set origin 0, myBottomMargin
    set size 1, myPlotHeight
    set bmargin 0
    set label 1 at graph 1.0, graph 1.0 "185.72 keV" right offset -1,-1
    plot sin(x) w l lc 1 notitle
    
    unset xlabel
    set format x ""
    set origin 0, myBottomMargin myPlotHeight
    set label 1 at graph 1.0, graph 1.0 "351.03 keV" right offset -1,-1
    plot sin(2*x) w l lc 2 notitle
    
    set origin 0, myBottomMargin 2*myPlotHeight
    set label 1 at graph 1.0, graph 1.0 "831.98 keV" right offset -1,-1
    plot sin(3*x) w l lc 3 notitle

unset multiplot
### end of code
  

Результат:

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

Комментарии:

1. вау! идеально! большое вам спасибо 🙂 единственное, что сейчас, это то, что мне не нужен символ в ключе, просто число. есть идея?

2. Спасибо за ваше дополнение. Таким образом, символ ключа не виден, но число, например, «185,72», все еще находится в том же положении, что и раньше. Было бы красивее, если бы он был выровнен по правому краю, как символ на моей картинке выше. У кого-нибудь есть идея, как удалить символ в ключе, чтобы заголовок графика был выровнен по верхнему правому краю?

3. я нашел на странице 62 руководства по gnuplot 5.2 (версия 5.2, организованная: Итаном Мерриттом и многими другими) график, в котором ключ имеет только текст и не имеет символа, но сценарий не показан — я все еще не знаю, как это сделать, но это возможно!

4. если вы просто хотите иметь одно число в правом верхнем углу каждого графика, вы могли бы использовать set label . Проверьте help label . Всегда используйте label 1 для перезаписи предыдущей метки. Я изменю пример.

5. @pablobanano отвечает ли это на ваш вопрос? Приветствуется любой ответ.