Gnuplot:如何(系统地)将每列乘以一个因子

时间:2019-11-16 15:26:18

标签: gnuplot

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

# 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经常使用此文件)。我梦of以求的东西:

set datafactor $1 1000
set datafactor $4 1.e-6
plot 'data.dat' u 1:4 

但找不到它。 我知道我也可以使用重定向和外部脚本即时进行转换(如果有人感兴趣,我会将其发布为答案),但是对于这样一个简单而常见的任务来说似乎太复杂了。

有人知道该怎么做吗?是否有本机gnuplot方式可以进行一次这种转换?

2 个答案:

答案 0 :(得分:1)

您可能有3个选择:

  1. 使用任何软件永久更改数据文件
  2. 在将数据文件列加载到gnuplot时将它们乘以一次
  3. 每次绘制列时都要乘以列

您可能不想要的选项1,您绝对不想要的选项3,因此,也许选项2可能是与Python代码类似的解决方案。您基本上将文件加载到数据块中,对其进行缩放,然后绘制该数据块。

### mulitply data columns with factor
reset session

set table $Data
    plot 'data.dat' u ($1*1000):($2*1000):($3*1000):($4*1e-6):($5*1e-6):($6*1e-6) w table
unset table

plot $Data u 1:4
### end of code

限制:

请记住,如果某些注释行或数据由单个或多个空行分隔,这在某些情况下可能是绘图所必需的,那么在plot ... with table时,这些行将全部删除。如果您需要这些空行,则可能是更复杂的gnuplot解决方法,或者您需要调用外部软件。

答案 1 :(得分:0)

因此,这是带有外部脚本的(不简单)解决方案。 在gnuplot中:

days_diff=$(( (`date -d $B +%s` - `date -d "00:00" +%s`) / (24*3600) ))

其中scale.py如下:

data='< ./scale.py data.dat 1000 1000 1000 1.e-6 1.e-6 1.e-6'
plot data u 1:4

如果转换功能是一些复杂的操作,这将适合我。但是在这里,我的问题似乎是如此简单,以至于我猜应该存在一个gnuplot本机解决方案。