You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在gnuplot的Y轴标签中使用科学计数法指数%S?

在gnuplot中将科学计数法指数移至Y轴标签的方法

当然可以实现!你想把科学计数法的指数从Y轴刻度挪到标签里节省空间的需求,在gnuplot里完全能做到。不过你原脚本里直接在ylabel里写%S是行不通的,因为%S只能在set format的格式字符串里使用,没法直接传递到标签中。我给你两种可行的方案:

方案一:自动获取指数(推荐)

这个方法会让gnuplot自动计算数据对应的科学计数法指数,然后把它插入到Y轴标签里,同时让刻度只显示系数:

reset
set term png
set out 'sci.png'
set xlabel 'X'
set xtics out; set mxtics; set ytics out; set mytics

# 先绘制一次,让gnuplot自动计算Y轴范围和对应的指数
plot exp(x) w l
# 用内置变量GPVAL_Y_EXP获取指数,动态设置Y轴标签
set ylabel sprintf('Y ×10^%d', GPVAL_Y_EXP)
# 设置Y轴刻度只显示系数,不再带指数
set format y '%.0f'
# 重新绘制最终图像
replot
unset out

关键说明:

  • 第一次plot的作用是触发gnuplot计算Y轴的范围,此时它会把自动生成的科学计数法指数存在GPVAL_Y_EXP这个内置变量里。
  • sprintf函数用来把指数值插入到Y轴标签的字符串中,这样标签就会变成类似Y ×10^2的形式(具体指数根据你的数据而定)。
  • set format y '%.0f'让Y轴刻度只显示纯数字的系数,彻底把指数部分移到标签上。

方案二:手动指定指数

如果你已经知道数据的范围,也可以手动计算并设置指数,省去第一次绘制的步骤:

reset
set term png
set out 'sci.png'
set xlabel 'X'
set xtics out; set mxtics; set ytics out; set mytics

# 手动定义Y轴最大值并计算对应的指数
ymax = exp(5)  # 这里根据你的数据调整,比如exp(x)默认X范围的最大值是exp(5)
y_exp = floor(log10(ymax))
# 设置带指数的Y轴标签
set ylabel sprintf('Y ×10^%d', y_exp)
# 设置Y轴刻度为系数对应的实际值,同时让刻度显示系数
set format y '%.0f'
set ytics (0, 10**y_exp, 2*10**y_exp, 3*10**y_exp)
# 绘制图像
plot exp(x) w l
unset out

这样调整后,你的Y轴刻度就会干净很多,指数统一放在标签里,完美节省绘图空间~

内容的提问来源于stack exchange,提问作者Felix

火山引擎 最新活动