2014-01-20 5 views
2

Я хочу, чтобы создать команду Gnuplot участок программно, например:gnuplot генерирует команду построения с помощью sprintf?

plotline = sprintf("'datafile1.dat' using %d:3 with points, '%s' using %d:3 with points",i,targfile,i) 
plot plotline 

Где сюжетная 'во второй строке раскрывается, чтобы получить и выполнить полную команду, как:

plot 'datafile1.dat' using 8:3 with points, 'datafile2.dat' using 8:3 with points 

Я хочу сделайте это, чтобы отобразить «сюжетную линию» в терминале и, таким образом, точно определите, что отображается при циклическом переходе через набор столбцов/файлов данных/что-то внутри цикла в скрипте gnuplot.

Есть ли какой-либо синтаксис для этого, или вы можете предложить другой подход, чтобы сообщить команду plot как выполненную (без разделения на команду plot и отдельный набор команд для представления текущих состояний переменных).

Спасибо!

+0

'sprintf (« формат », x, ...) - результат из C-языка sprintf' ... см. Здесь http://www.gnuplot.info/docs_4.2/gnuplot.html – nrathaus

ответ

2

Для того, чтобы построить такую ​​команду участок от некоторых строк, вы можете использовать eval для выполнения команд, содержащихся в строке:

plotline = 'x title "mytitle"' 
eval('plot '.plotline) 

В качестве альтернативы вы можете использовать set macros:

set macros 
plotline = 'x title "mytitle"' 
plot @plotline 

Это заменяет @plotline с содержимым строковой переменной plotlineдо выполнение команды. Использование plot plotline интерпретирует содержимое plotline как имя файла. Обратите внимание, что с версии 4.6 макросы не работают должным образом в циклах, но eval отлично работает.

BTW: Если вы не укажете свой собственный заголовок, тогда фактическое заявление о сюжете написано в легенде сюжета. Но это не может быть записано на вывод терминала.

+0

спасибо! не смог сделать «установленные макросы ... @plotline» для меня, поскольку сюжетная линия из sprintf является «не строковой переменной», однако eval() делает именно то, что я был после. – robm

+0

Thats странно. Для меня, с 4.6.3, оба следующих оператора отлично работают: 'set macros; plotline = sprintf ("% f * x", 4); plot @ plotline', а также 'set macros; plotline = sprintf ("'% s' с использованием 0: 1", 'test.txt'); plot @ plotline' (конечно, при условии, что у вас есть такой файл 'test.txt'. – Christoph

+1

Я бы добавил, что с текущими версиями макросов версии 4.6 в цикле for не работает так, как предполагалось, поэтому версия eval должна быть – Andreas

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