2016-03-21 4 views
0

У меня есть несколько файлов, каждый из которых имеет такое же количество строк. Файлы называются «something_integer.txt», например «a100.txt», «a200.txt», «a300.txt» ... и так (целое число равно 100, и что-то всегда одно и то же). Каждая строка соединена во времени с той же строкой других файлов, но не связана с другими строками.Gnuplot: график из числа и из файла

Я хочу построить всю строку 1 всех файлов в одном графике, всю строку 2 всех файлов в другом отдельном графике (но накладывается на предыдущий) и так далее. Как это сделать с помощью gnuplot?

Я знаю, что мне нужно использовать цикл for. Я думал, в чем-то вроде (только для строки 1 и строки 2):

do for [i=100:5000:100] { 
    plot sprintf('something_%d.txt',i) every 1::1::1 using ¿¿¿¿¿????:5, 
     sprintf('something_%d.txt',i) every 1::2::2 using ¿¿¿¿¿????:5 
} 

но возникают вопросы:

  1. Где я ставлю "¿¿¿¿¿????" потому что я хочу построить как y значение столбца 5, но как x значение i, а не значение столбца i. Как вы можете это сделать?
  2. Если каждый раз, когда продолжается цикл, у меня есть инструкция по графику, будут ли удалены предыдущие точки? они будут связаны, как я хочу?

ответ

0

Первый вопрос прост: вы должны использовать скобку using (i):5

Если я правильно понимаю, для второго, вы должны переместить петлю внутри plot:

plot for [i=100:5000:100] \ 
    sprintf('something_%d.txt',i) every 1::1::1 using (i):5, \ 
    sprintf('something_%d.txt',i) every 1::2::2 using (i):5 

Is это то, что вы хотели?

+0

Не совсем. Это нормально для начала, но я хотел бы соединить все точки строки 1 между ними с линией и всеми точками строки 2 с другой строкой. При этом каждая точка похожа на «серию данных». –

0

Я думаю, что попытка сделать это внутри gnuplot - это излишество (но мне нравятся решения overkill!). Вам лучше с некоторой предварительной обработкой в ​​bash, используя awk или что-то подобное. Однако вы можете использовать команду awk из вашего кода gnuplot. Это делает то, что вы хотите:

loop = ""; do for [i=100:5000:100] { loop = sprintf("%s %i", loop, i) } 

file(n) = "< for i in ".loop."; do awk -v i=$i 'NR==".n."{print i, $5}' a${i}.txt; done" 

plot file(1) w l, file(2) w l 

n это строка вы выбираете, так что file(1) выбирает грести нет. 1 во всех ваших файлах, а file(2) выбирает номер строки. 2 во всех ваших файлах и т. Д.

Смежные вопросы