我知道如何在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;),我的意思是正确的。
答案 0 :(得分:2)
Gnuplot提供了自己的格式化函数gprintf
,它支持所有这些特定于gnuplot的格式说明符
print gprintf('%.1s%c', 2e+3)
打印
2.0k
引用官方文件:
字符串函数
gprintf("format", x)
使用gnuplot自己的格式说明符,gnuplot命令设置格式,设置时间戳等。这些格式说明符与使用的格式说明符不同 标准C语言例程sprintf()
。gprintf()
只接受要格式化的单个变量。