gnuplot 千百万米微纳米微微中的后缀符号

Posted

技术标签:

【中文标题】gnuplot 千百万米微纳米微微中的后缀符号【英文标题】:suffix notation in gnuplot kilo mega mili micro nano pico 【发布时间】:2015-05-12 09:12:33 【问题描述】:

我知道如何在 gnuplot 轴中使用后缀符号:

set ytics format "%.1s%c"

但是在 sprintf 中没有考虑到这一点...

gnuplot> pr sprintf("%s", 2e+3)
     f_sprintf: attempt to print numeric value with string format

所以我做了自己的功能:

suffixNotation(x)=sprintf("%g%s",\
(x>=1e+9&&x<1e+12 ) ? x*1e-9 :\
(x>=1e+6&&x<1e+9 ) ? x*1e-6 :\
(x>=1e+3&&x<1e+6 ) ? x*1e-3 :\
(x>=1e-3&&x<1    ) ? x*1e+3 :\
(x>=1e-6&&x<1e-3 ) ? x*1e+6 :\
(x>=1e-9&&x<1e-6 ) ? x*1e+9 :\
(x>=1e-12&&x<1e-9) ? x*1e+12 : x\
,\
(x>=1e+6&&x<1e+12 ) ? "G" :\
(x>=1e+6&&x<1e+9 ) ? "M" :\
(x>=1e+3&&x<1e+6 ) ? "k" :\
(x>=1e-3&&x<1    ) ? "u" :\
(x>=1e-6&&x<1e-3 ) ? "n" :\
(x>=1e-9&&x<1e-6 ) ? "p" :\
(x>=1e-12&&x<1e-9) ? "f" : ""\
)

# gnuplot> i=4.321e-13 ; while (i<10e6)  pr suffixNotation(i); i=i*10;
# 4.321e-13 4.321f 43.21f 432.1f 4.321p 43.21p 432.1p 4.321n 43.21n 432.1n 4.321u 43.21u 432.1u 4.321 43.21 432.1 4.321k 43.21k 432.1k 4.321G

问题 1 ?有谁知道这个函数是否已经存在于 gnuplot 中?

问题 2? gnuplot 开发者是否计划将其添加到 sprintf 中?

问题 3 ?我们如何处理 gnuplot 中的“包”,例如 load("$GNUPLOTPATH/suffixNotation.gp"),我的意思是正确的。

【问题讨论】:

我只为您的问题 1 和 2 添加了答案。关于“包裹”,我建议您提出一个新问题,因为它与其他问题无关。另外,你应该更清楚你对“正确”的理解。 谢谢克里斯托夫,你知道相反的功能吗?打印 "2k"+0 #==> 2.0 这是错误的。我会调用这个函数 string2float("2.3k") ==> 2.3e+3。有些软件甚至可以解释2.3n+3p,这很棒。我希望 gnuplot 可以做到这一点。 不,gnuplot 中没有解析字符串的功能。这是一个自己的实现:scan_scival(s) = s[:strlen(s)]*(strstrt("munpaz", s[strlen(s):]) &gt; 0 ? 10**(-3.0*strstrt("munpaz", s[strlen(s):])) : (strstrt("kMGTP", s[strlen(s):]) &gt; 0 ? 10**(3.0*strstrt("kMGTP", s[strlen(s):])) : 0))。这包含一些重复,但更干净,因为 gnuplot 函数没有本地范围,并且函数内部定义的任何变量在调用函数后都是可见的。 print scan_scival("3.44e4k")34400000.0 【参考方案1】:

Gnuplot 提供了自己的格式化函数gprintf,它支持所有这些 gnuplot 特定的格式说明符

print gprintf('%.1s%c', 2e+3)

打印

2.0k

引用官方文档:

字符串函数gprintf("format", x) 使用gnuplot 自己的格式说明符,gnuplot 命令set formatset timestamp 等也是如此。这些格式说明符与 标准 C 语言例程sprintf()gprintf() 只接受一个要格式化的变量。

【讨论】:

以上是关于gnuplot 千百万米微纳米微微中的后缀符号的主要内容,如果未能解决你的问题,请参考以下文章

《膜你抄》

oi再见,你好明天。

电科 | 电子器件微纳米加工技术

μm是微米,μ是啥符号?

使用sprintf打印字符串值

gnuplot 如何从文件读取数据