«set decimalsign» контролирует только вывод, а не ввод.Ввод контролируется "set locale".Я не могу проверить это, потому что у меня не установлена ваша локаль, но она должна работать, чтобы сделать
set locale "Russian_Russia.1251"
set decimalsign locale "Russian_Russia.1251"
plot "demo_err.csv" u ($0):(0):(sprintf("%.1f", $1)) w labels
[Редактировать] Я сейчас воспроизвел проблему, используя другую локаль.Происходит то, что каждый раз, когда вызывается sprintf, он устанавливает языковой стандарт при входе и сбрасывает его до «C» при выходе.Если sprintf появляется в командной строке gnuplot, это именно то, что вы хотите.Но если он вызывается во время оценки спецификации 'using', это забивает состояние следующей операции чтения ввода данных.Обходной путь для вашего простого тестового случая - избегать использования sprintf в спецификации 'using':
plot "demo_err.csv" u ($0):(0):(stringcolumn(1)) w labels
. Я не знаю, возможен ли эквивалентный обходной путь для вашего полного варианта использования:избегая sprintf внутри предложения «using» команды plot.Тем временем я отправлю сообщение об ошибке на трекер ошибок gnuplot.