gnuplot 更改计算变量的格式

gnuplot changing format of calculated variable

我在 gnuplot 中有这段代码来绘制平均值。

问题是该值非常低,例如 0.00000000000000001。 我想用科学记数法来绘制它,但是如果我尝试遵循设置格式指南,我会遇到这个错误。

谢谢! 我拥有的代码:

stats filename u (*):2 nooutput
mean = STATS_sum_x/STATS_sum_y
set arrow 1 from mean, graph 0 to mean, graph 1 nohead lw 2 lc rgb "red" front
set label 1 sprintf("Mean: %8.6f", mean) at mean, graph 1 offset 1,-0.7

如果我尝试使用科学记数法,代码:

stats filename u (*):2 nooutput
mean = STATS_sum_x/STATS_sum_y
set arrow 1 from mean, graph 0 to mean, graph 1 nohead lw 2 lc rgb "red" front
set label 1 sprintf("Mean: %s*10^{%S}", mean) at mean, graph 1 offset 1,-0.7


错误:

f_sprintf: attempt to print numeric value with string format

谢谢!

我对 help format_specifiers 的文档也有点困惑。

检查 help gprintf 并尝试使用 gprintf() 而不是 sprintf()。也许以下使用 %h 也适合您。

代码:

reset session
mean = 0.00000000000000001    # or 1e-17
set label 1 gprintf("Mean: %h", mean)
plot x

结果:

@theozh 给了你正确的答案,我想对此做一些扩展。如果您想增强标签的外观,您可能需要将 x 替换为 × 并将连字符替换为适当的减号。然后,您可以使用 %t%T:

创建自己的自定义标签
set encoding utf8
set minussign
a=1e-17
set label 1 gprintf("Mean: %.0t × 10^{%T}", a)
plot sin(x)

如果您打算使用 LaTeX,您当然也可以改用 LaTeX 代码。

我不知道 Gnuplot 的 gprintf 函数,但我一直在关注 C 的诞生……以及 [s]printf 函数。我相信原来的 post 混淆了两者之间的格式。 sprintf("Mean: %s*10^{%S}", mean) 有一些 sprintf 错误:

  • %s格式化一个字符串,意思是一个数字
  • %S 未知 sprintf 格式和缺少参数
  • sprintf 将为每个格式说明符假定一个参数。

这是一个 Gnuplot 脚本,其中包含一些 sprintf 浮点数格式示例:

a=1.2345e-17
b=5.4321
print sprintf("a=%f", a)
print sprintf("a=%e", a)
print sprintf("a=%g", a)
print sprintf("a=%.3e", a)
print sprintf("a=%.3g", a)
print sprintf("b=%f", b)
print sprintf("b=%e", b)
print sprintf("b=%g", b)
print sprintf("b=%.3e", b)
print sprintf("b=%.3g", b)
print sprintf("Multiple arguments: a=%g  b=%f", a, b)"

结果:

a=0.000000
a=1.234500e-17
a=1.2345e-17
a=1.235e-17
a=1.23e-17
b=5.432100
b=5.432100e+00
b=5.4321
b=5.432e+00
b=5.43
Multiple arguments: a=1.2345e-17  b=5.432100

gprintf 函数是一个不错的选择,help format specifiers 属于该函数。对于 sprintf 说明符,请在互联网上搜索 C 函数帮助。