Gnuplot отправка новой строки и ", \" из python - PullRequest
4 голосов
/ 27 июля 2011

Обычно при использовании интерактивного gnuplot я делаю:

gnuplot> plot "state_log_6548032.data" using 4 with lines lt -1 lw 0.5 title "X axis" ,\
>"state_log_6548032.data" using 5 with lines lt 1 lw 0.5 title "Y axis" ,\
>"state_log_6548032.data" using 6 with lines lt 2 lw 0.5 title "Z axis"

Однако, когда я пытаюсь сделать то же самое с помощью python с использованием подпроцесса:

gnuplot.write( "plot \"%s\" using 1 with lines lt -1 lw 0.5 title 'X axis' ,\ \n" %filename )
gnuplot.write( "plot \"%s\" using 2 with lines lt 1 lw 0.5 title 'Y axis' ,\ \n" %filename )
gnuplot.write( "plot \"%s\" using 3 with lines lt 2 lw 0.5 title 'Z axis' \n" %filename )

Я получаю следующие ошибки:

gnuplot> plot "state_log_6548032.data" using 1 with lines lt -1 lw 0.5 title 'X axis' ,\ 
                                                                                       ^
         line 0: invalid character \

gnuplot> plot "state_log_6548032.data" using 2 with lines lt 1 lw 0.5 title 'Y axis' ,\ 
                                                                                      ^
         line 0: invalid character \

Я потратил много времени, пытаясь выяснить, является ли это проблемой с python, но я выяснил, что это проблема с gnuplot, который по какой-то причине использует escape-символ при вызове из консоли, но не требуется в моем случае.Однако моя проблема остается.Как я могу отобразить данные выше ^^ последовательными строками либо из подпроцесса python, выполнив инструкции, либо создав файл gnu из python и вызвав подпроцесс gnuplot для использования этого файла?

EDIT:

Для тех, кто может когда-либо застрять в этой простой мелочи: как объясняет ниже хороший народ, который поддерживает это сообщество, Python избегает "\", когда вы используете "\".Таким образом, решение было просто:

gnuplot.write( "plot \"%s\" using 1 with lines lt -1 lw 0.5 title 'X axis' ,\\\n" %filename )
        gnuplot.write( "\"%s\" using 2 with lines lt 1 lw 0.5 title 'Y axis' ,\\\n" %filename )
        gnuplot.write( "\"%s\" using 3 with lines lt 2 lw 0.5 title 'Z axis' \n" %filename )

Ответы [ 4 ]

4 голосов
/ 27 июля 2011

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

Это здорово, если вы вводите данные вручную, но если вы делаете это программно, зачем вам это?Просто отправьте одну строку, Python не будет жаловаться на удобочитаемость :).Если вам интересно, в чем заключалась проблема, это потому, что Python также использует \ в качестве escape-последовательности , поэтому персонаж никогда не достигает gnuplot.

.являются библиотеками python-gnuplot для обработки всей этой грязной работы за вас.Проверьте их!

1 голос
/ 30 октября 2013

В моем случае с Gnuplot 4.6 и openuse linux был важен тип и порядок включения апострофов: gnuplot запускался как подпроцесс. Открыть, записав:

gnuplot.stdin.write("set format x '%d %h\\\n%H:%M'")

... напечатал символ новой строки как литерал воднострочная метка, когда:

gnuplot.stdin.write('set format x "%d %h\\\n%H:%M"')

... работает должным образом, создавая двухстрочные метки вдоль оси времени x.

1 голос
/ 27 июля 2011

Чтобы передать обратную косую черту литерала в gnuplot, используйте \\ в строке Python (так же, как вы используете \n для передачи литерала новой строки). \ обычно запускает escape-последовательности, и в вашем случае у вас есть \; для этого нет особого значения, поэтому он просто интерпретируется как пробел (то есть обратный слеш пропускается).

Вы можете проверить содержимое ваших строк, print используя их, а не передавая их gnuplot.write.

Тем не менее, есть хорошие шансы, что вы можете просто поместить все это в одну строку, вместо того, чтобы передавать обратную косую черту и символы новой строки в gnuplot.

1 голос
/ 27 июля 2011

Я думаю, что когда вы делаете \ (пробел) в Python, вы выходите из пробела, и я думаю, что когда вы делаете \, затем нажимаете enter в gnuplot, вы выходите из новой строки. *

Вы пробовали это только с ,\n в конце, питонским способом выхода из новой строки? С , или , (запятая)? С \n?

Вероятно, если вам нужно выйти из новой строки, это на самом деле не нужно, и просто , будет работать для разделения команд.

...