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 函数帮助。
我在 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 函数帮助。