gnuplot kilo mega mili micro nano pico中的后缀表示法

时间:2015-05-12 09:12:33

标签: string format gnuplot scientific-notation

我知道如何在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?我们如何处理&#39;包装&#39;在gnuplot中加载(&#34; $ GNUPLOTPATH / suffixNotation.gp&#34;),我的意思是正确的。

1 个答案:

答案 0 :(得分:2)

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

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

打印

2.0k

引用官方文件:

  

字符串函数gprintf("format", x)使用gnuplot自己的格式说明符,gnuplot命令设置格式设置时间戳等。这些格式说明符与使用的格式说明符不同   标准C语言例程sprintf()gprintf()只接受要格式化的单个变量。