Gnuplot:如何将每列乘以一个因子

问题描述 投票:0回答:1

我有一些看起来像这样的数据:

# 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
1个回答
0
投票

所以这是带有外部脚本的(不简单的)解决方案。在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本机解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.