Заголовок строки в мультиплоте - PullRequest
0 голосов
/ 16 октября 2018

На рисунке ниже каждая строка соответствует отдельному регистру / параметру.Параметры сверху вниз: nmesh-2, nmesh-4, nmesh-6, nmesh-8.Я хотел бы написать каждый параметр слева от ylabel или Elapsed time.Другими словами, я хочу «заголовок строки».Также было бы хорошо, если бы имя параметра было больше чем и повернуто как Elapsed time.Мой код включает в себя имена файлов, но в случае, если я включил его также.

enter image description here

set key autotitle columnhead
set boxwidth 0.5
set style fill transparent solid
set nokey

set terminal wxt size 1900,990
set multiplot layout 4, 7
set xtics rotate by -45

np = "8 12 16 20 24 28 32"
do for [IDX=1:7] {
    if (IDX == 1) {
        set ylabel 'Elapsed time'
    }
    else {
        unset ylabel
    }
    set title sprintf("np-%s", word(np, IDX))
    plot sprintf("run-1/np-%s/nmesh-2/load-estim-0/hole-cut-implicit/cpupertask-3/ncell-11/dominant-0.dat", word(np, IDX)) u 2:xtic(1) with boxes
}
set notitle
do for [IDX=1:7] {
    if (IDX == 1) {
        set ylabel 'Elapsed time'
    }
    else {
        unset ylabel
    }
    plot sprintf("run-1/np-%s/nmesh-4/load-estim-0/hole-cut-implicit/cpupertask-3/ncell-11/dominant-0.dat", word(np, IDX)) u 2:xtic(1) with boxes
}
do for [IDX=1:7] {
    if (IDX == 1) {
        set ylabel 'Elapsed time'
    }
    else {
        unset ylabel
    }
    plot sprintf("run-1/np-%s/nmesh-6/load-estim-0/hole-cut-implicit/cpupertask-3/ncell-11/dominant-0.dat", word(np, IDX)) u 2:xtic(1) with boxes
}
do for [IDX=1:7] {
    if (IDX == 1) {
        set ylabel 'Elapsed time'
    }
    else {
        unset ylabel
    }
    plot sprintf("run-1/np-%s/nmesh-10/load-estim-0/hole-cut-implicit/cpupertask-3/ncell-11/dominant-0.dat", word(np, IDX)) u 2:xtic(1) with boxes
}

1 Ответ

0 голосов
/ 18 октября 2018

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

set ylabel "nmesh-2\n\nElapsed time"

Однако гибкость этого решения довольно ограничена.В качестве альтернативы можно использовать set multiplot с параметром margins, чтобы убедиться, что для «заголовков строк» ​​в глобальном левом поле всего мультиплота достаточно места, вычислить координаты отдельной «строки».заголовки "в экранных координатах вручную и отображать их на последнем графике:

set terminal pngcairo size 1900,990 enhanced
set output 'fig.png'

numOfRows = 4
marginLeft = 0.1
marginRight = marginLeft/2
marginV = 0.1
plotSpacing = marginV / 2
plotHeight = (1. - 2*marginV - (numOfRows-1)*plotSpacing) / numOfRows
labelPos(i) = 1. - (marginV + plotHeight/2 + i*(plotHeight + plotSpacing))

params = "nmesh-2 nmesh-4 nmesh-6 nmesh-8"

set multiplot layout numOfRows,7 margins marginLeft,1-marginRight,marginV,1-marginV spacing plotSpacing

set key autotitle columnhead
set boxwidth 0.5
set style fill transparent solid
set nokey

set xtics rotate by -45

np = "8 12 16 20 24 28 32"
do for [IDX=1:7] {
    if (IDX == 1) {
        set ylabel 'Elapsed time'
    }
    else {
        unset ylabel
    }
    set title sprintf("np-%s", word(np, IDX))
    plot sin(x) w l
}
set notitle
do for [IDX=1:7] {
    if (IDX == 1) {
        set ylabel 'Elapsed time'
    }
    else {
        unset ylabel
    }
    plot sin(x) w l
}
do for [IDX=1:7] {
    if (IDX == 1) {
        set ylabel 'Elapsed time'
    }
    else {
        unset ylabel
    }
    plot sin(x) w l
}


do for [IDX=1:7] {
    if (IDX == 1) {
        set ylabel "Elapsed time"
    }
    else {
        unset ylabel
    }

    if (IDX == 7) {
      do for [j=1:4] {
        set label word(params, j) at screen marginLeft/2, screen labelPos(j-1) offset char -2, 0 center rotate by 90 font "Arial,16"
      }
    }
    plot sin(x) w l
}

Это должно дать: enter image description here

...