gnuplot - 如何将x轴格式化为更小的比例?
问题描述
所以这就是我想要做的。x 轴上的值来自 10000、20000、30000、... 100000。我正在尝试这样写:10、20、30、40、... 100(仅 x 轴)
在 Gnuplot 中有什么方法可以做到这一点吗?
到目前为止我有这个:(data.dat - 数据示例)
# x y
10000 +1.24241522E-04
11000 +1.28623514E-04
12000 +1.35229020E-04
13000 +1.43767741E-04
14000 +1.53409148E-04
15000 +1.63788695E-04
16000 +1.75429485E-04
17000 +1.88827813E-04
18000 +2.02984785E-04
19000 +2.20830420E-04
...
(我的 gnuplot 脚本)
set term png
set out 'example.png'
U0 = 0.00732 #parameters for this particular problem
v1 = 68000
b1 = 6550
v2 = 59600
b2 = 6050
I = sqrt(-1)
A(w, w0, b) = ((w0)**2)/(((w0)**2) - ((w)**2) + 2*I*w*b)
f(x) = U0*abs(A(2*pi*x, 2*pi*v1, b1) - A(2*pi*x, 2*pi*v2, b2))
set xlabel "x"
set ylabel "y"
fit f(x) 'data.dat' u 1:2 via U0, v1, b1, v2, b2
plot 'data.dat' u 1:2 t "Title1" w p, U(x) t "Title2"
set out
但是我该怎么做呢?我已经尝试过这个示例
How to scale the axes in Gnuplot
但它不起作用。见下文。
# I modified the things a little bit
f(x) = (.... ... ....)/1000
fit f(x) 'data.dat' u ($1/1000.):2 via U0, v1, b1, v2, b2
plot 'data.dat' u ($1/1000.):2 t "Title1" w p, f(x) t "Title2"
但是现在拟合函数消失了!
如何在不消失其他功能的情况下修改 x 轴?
gnuplot 中是否存在用于此的行命令?我敢肯定,必须有一种更优雅的方式来编写这个,将每个函数除以所需的因子。
解决方案
我想到了两种可能的方法:
如果您想避免 xtic 标签中出现太多零,只需将 xtic 标签格式设置为 engineering
set format x "%.0s%c"
例如,这将显示 10000 和 100000 分别为 10k 和 100k。
如果您将数据的 x 值缩放(在您的情况下:除以 1000 倍),gnuplot 将采用此 x 范围来绘制函数
f(x)
。由于这将给出 1000 倍的 x 值太小,因此您必须相应地将 x 值缩放 1000 倍(在您的情况下:相乘)。
代码:
### avoid too many zeros in xtic labels
reset session
# create some random test data
set print $Data
A = rand(0)*10+5
B = rand(0)*50000+25000
C = rand(0)*5000+5000
do for [i=10000:100000:500] {
print sprintf("%g %g",i,A*exp(-((real(i)-B)/C)**2))
}
set print
a=1; b=50000; c=5000 # give some reasonable starting values
f(x) = a*exp(-((x-b)/c)**2)
set fit quiet nolog
fit f(x) $Data u 1:2 via a,b,c
set multiplot layout 1,2
set format x "%.0s%c" # set xtics to engineering
plot $Data u 1:2 w p, \
f(x) w l lc "red"
set format x "%g" # set xtics to default
plot $Data u ($1/1000):2 w p, \
f(x*1000) w l lc "red"
unset multiplot
### end of code
结果:
推荐阅读
- php - Socket.io 离子 4 和 php
- javascript - setTimeout 函数是否以某种方式与使用在网页上运行 JavaScript 的 iOS 快捷方式一起工作?
- android-studio - 终端中的 build.gradle 文件出错
- php - 如何保存从角度接收到的图像?
- c++ - 如何在我的自定义列表迭代器类中将迭代器转换为 const_iterator?
- android - Android NDK:以编程方式确定屏幕的每秒帧数 (fps)
- ios - 触地重复事件不起作用
- unit-testing - 如何断言 Go 测试中的错误类型?
- curl - 跟踪所有重定向的最佳工具,包括元刷新/javascript重定向?
- python - For循环问题