gnuplot - 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,\
如您所见,第一个标签没问题,但在第二个和第三个标签中,分数显示为 0。我做错了什么?
Gnuplot 版本是 5.2.6
解决方案
"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 问题跟踪器的错误报告。
推荐阅读
- java - onActivityResult 没有通过 requestCode
- jdbc - 防止 WildFly 过早解除绑定数据源
- css - 用于循环文本的 CSS 关键帧
- wordpress - 将 URL 保存到重力表单项列表
- php - 如何在 sprintf PHP 中添加逗号分隔?
- python - 如何阻止我的脚本超出范围?
- python - 合并不同长度的数据框
- spring - size 和 notnull 弹簧注释不能正常工作
- javascript - 无法使用 apollo-server-micro 和 NextJS 上传 1MB 以上的文件
- graphql - Apollo 可以从缓存中读取部分片段吗?