我有一些看起来像这样的数据:
# 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方式可以进行一次这种转换?
答案 0 :(得分:1)
您可能有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本机解决方案。