首页 > 解决方案 > 如何将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 中是否存在用于此的行命令?我敢肯定,必须有一种更优雅的方式来编写这个,将每个函数除以所需的因子。

标签: gnuplotaxes

解决方案


我想到了两种可能的方法:

  1. 如果您想避免 xtic 标签中出现太多零,只需将 xtic 标签格式设置为 engineering

    set format x "%.0s%c"

    例如,这将显示 10000 和 100000 分别为 10k 和 100k。

  2. 如果您将数据的 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

结果:

在此处输入图像描述


推荐阅读