Отображение подчеркивания, а не индекса в заголовках gnuplot
Короткий вопрос:
Как отобразить символ _
(подчеркивание) в заголовке в gnuplot, который назначен из имени переменной в gnuplot?
Подробнее:
У меня есть что-то вроде следующего кода:
items = "foo_abc foo_bcd bar_def"
do for [item in items] {
set title item
set output item.eps
plot item."-input.txt" using 1:2 title item with linespoints
}
Это отлично работает с gnuplot, за исключением того, что заголовок изменен с foo_abc на foo a bc. Я не знаю, хочу ли я использовать escape-символ, потому что я не хочу, чтобы это было в имени файла. Я пробовал пару различных вариантов с одиночными или двойными кавычками, но я еще не нашел того, что мне нужно.
Ответы
Ответ 1
Если вы используете расширенный терминал eps, это причина, по которой вам необходимо избежать подчеркивания в первую очередь. Сегодня был другой связанный вопрос, который немного объясняет проблему. Когда вы устанавливаете терминал, попробуйте:
set terminal postscript noenhanced <whatever else here...>
Это работает для меня (Arch linux, gnuplot 4.7.0). Если расширенный терминал имеет важное значение, ниже приведено частичное решение. Предполагается, что подчеркивание всегда появляется в одном и том же месте в строке.
set terminal postscript enhanced
items = 'foo\_abc foo\_bcd bar\_def'
do for [item in items] {
set output item[1:3].item[5:*].'.eps'
set title item
plot sin(x)
}
Таким образом вы можете избежать подчеркивания и не указывать\в имени файла. Обратите внимание на использование одинарных кавычек для строки "items"; см. ранее связанный вопрос для деталей.
Ответ 2
Большинство команд gnuplot, которые генерируют метки, принимают ключевое слово noenhanced
, которое предотвратит использование gnuplot расширенного текста только для этой строки. В этом случае должно быть достаточно просто:
set title item noenhanced
Альтернативой является создание функции, которая удаляет ненужный текст из строки при передаче ее в set output
:
remove(x,s)=(i0=strstrt(s,x),i0 ? remove(x,s[:i0-1].s[i0+strlen(x):]):s)
# Makes me wish gnuplot syntax was more pythonic :-p
#TODO: Write a `replace` function :-). These just might go into my ".gnuplot" file...
Я использую встроенную функцию, чтобы найти индекс первого вхождения x
в строке s
. Затем я удаляю это событие через конкатенацию строк и нарезку и рекурсивно вызываю функцию снова, чтобы удалить следующее возникновение. Если индекс не найден (strstrt
возвращает 0), мы просто возвращаем строку, в которую была введена. Теперь вы можете сделать:
set output remove('\',item)
set title item
Ответ 3
Вместо foo_abc
напишите foo\\\_abc
.
Ответ 4
Подчеркивание происходит от обработки названий как "расширенный текст". Отключите это, используя
установить ключ noenhanced
Ответ 5
У меня была такая же проблема с подчеркиванием в заголовке: например, мне нужно было написать 4_3 подкадр, и мне нужен расширенный постскрипт. Путь SIMPLEST оказался из соседнего сообщения: "Если вы используете расширенный терминал eps, это причина, по которой вам необходимо избегать подчеркивания в первую очередь. Сегодня был еще один связанный с этим вопрос, который немного объясняет проблему. - Как создается @gnuplot?
Итак, я последовал их советам, и это сработало:
plot 'LC.stats' u 3: 4 ti "{/= 15 1350 звезд в C18 4\_3 подкадра}" - Двойной escape-символ перед подчеркиванием.