我有一些看起来像这样的数据:
# time Ux Uy sigXX sigYY sigXY
1.e-3 0.001 -0.001 1.e6 0.7e6 2.e5
2.e-3 0.002 -0.0025 2.e6 1.2e6 5.e5
3.e-3 0.004 -0.0035 2.8e6 1.4e6 9.e5
[您可以猜测数据是以国际单位制(s,m,Pa),而我正在使用gnuplot。
为了便于查看,我想将x / ytics设置为(ms,mm,Pa)。通常用using ($..)
:
set ylabel 'sig[MPa]'
plot 'data.dat' using ($1*1000):($4*1.e-6)
...但是添加所有这些括号变得很乏味(因为我replot
很多此文件)。我梦到类似的东西:
set datafactor $1 1000
set datafactor $4 1.e-6
plot 'data.dat' u 1:4
但还找不到它。我知道我也可以使用外部脚本即时进行转换(如果有人感兴趣,我会将其发布为答案),但是对于这样一个简单而常见的任务来说似乎太复杂了。
有人知道该怎么做吗?是否有本机gnuplot方式可以进行一次这种转换?
所以这是带有外部脚本的(不简单的)解决方案。在gnuplot中:
data='< ./scale.py data.dat 1000 1000 1000 1.e-6 1.e-6 1.e-6'
plot data u 1:4
其中scale.py为以下:
#!/usr/bin/env python3
import sys
import numpy as np
fic = sys.argv[1]
data = np.loadtxt(fic)
factors = map(float, sys.argv[2:])
print ('# scale', fic, 'by', list(factors))
for i,f in enumerate(factors):
data[:,i] *= f
np.savetxt(sys.stdout, data)
当转换函数必须很复杂时,这适合我。但是在这里,我的问题似乎是如此简单,以至于我认为应该存在一个gnuplot本机解决方案。