首页 > 解决方案 > Gnuplot 仅在第一个数据行中解释语言环境小数点分隔符

问题描述

我的数据文件是

1,1
1,2
1,3

我尝试使用以下脚本绘制它

set terminal pngcairo size 600,300 enhanced font "Calibri,18"
set output 'demo_err.png'

set xr [-1:3]
set yr [-1:+1]

#decimal separator in Russia is comma
set decimalsign locale "Russian_Russia.1251"

plot "demo_err.csv" u ($0):(0):(sprintf("%.1f", $1)) w labels,\

Gnuplot 结果

如您所见,第一个标签没问题,但在第二个和第三个标签中,分数显示为 0。我做错了什么?

Gnuplot 版本是 5.2.6

标签: gnuplot

解决方案


"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 命令行上,这正是您想要发生的。但是,如果在评估“使用”规范期间调用它,则会破坏下一个数据输入读取操作的状态。您的简单测试用例的解决方法是避免在“使用”规范中使用 sprintf:

plot "demo_err.csv" u ($0):(0):(stringcolumn(1)) w labels

我不知道是否可以通过在 plot 命令的“using”子句中避免 sprintf 来为您的完整用例提供等效的解决方法。同时我将提交一份关于 gnuplot 问题跟踪器的错误报告。


推荐阅读