Как я могу перебирать два списка файлов одновременно - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь сгенерировать кучу (мульти) графиков из данных в двух разных каталогах, назовите их dirA и dirB. Я использую мультиплот, и я бы хотел, чтобы каждый из них выглядел примерно так (простите мое мастерство) ...

enter image description here

где график A генерируется из файла данных в dirA, а график B - из dirB.

Я пробовал это (немного упростил) ...

filesA = system("ls dirA/*.dat")
filesB = system("ls dirB/*.dat")

i=0
do for [fn in filesA]{
    set output 'anappropriatefilename.png'

    set multiplot layout 1,2 rowsfirst

    set size 0.25,1.0
    plot fn using 1:2 with lines

    set multiplot layout 1,2 rowsfirst
    set size 0.75,1.0
    plot filesB[i] 1:2 with lines

    i=i+1

    unset multiplot
} 

, но это дает мне

':' ожидается

ошибка в строке

plot filesB[i] 1:2 with lines

Так что, может быть, я просто не знаю, как правильно ссылаться на массив filesB с индексом?

Или, может быть, есть лучший способ сделай это?

Надеюсь, я хорошо объяснил свою проблему, любые предложения приветствуются

Спасибо

1 Ответ

2 голосов
/ 23 января 2020

У вас есть файлы A1,A2,...An и B1,B2,...Bm. m всегда равно n? Какие выходные файлы должны иметь имя C1,C2,...Cn?

Следующий пример работает под windows. Надеюсь, вы можете адаптировать его для Linux.

Код:

### create multiplots from different filelists (Windows)
reset session
unset multiplot

myDirA = 'dirA\'
myDirB = 'dirB\'
myType = '*.dat'
filesA = system('dir /b '.myDirA.myType)  # Windows
filesB = system('dir /b '.myDirB.myType)  # Windows
# spaces in path or filenames probably will create problems and would require a workaround

set terminal pngcairo size 800,200 font ",8"
# Assumption: number of filesA and number of filesB are identical
#             and no spaces in path or filename
do for [i=1:words(filesA)] {
    set output sprintf("myPlot%03d.png",i)

    set multiplot layout 1,2
    set origin 0,0
    set size 0.25, 1.0
    plot myDirA.word(filesA,i) u 1:2 w lines

    set origin 0.25, 0
    set size 0.75, 1.0
    plot myDirB.word(filesB,i) u 1:2 w lines

    unset multiplot
    set output
}
### end of code
...