1

多くの列のデータを含むデータ ファイルがあり、最初の 2 行は次のようになります。

#time a1 b1 c1 d1 a2 b2 c2 d2 
1 2 3 4 5 6 7 8 9

グラフに次のようなタイトルを付けたいと思います。

a1=2, a2=6, b1=3, b2=7, c1=4, c2=8, d1=5, d2=9

したがって、基本的には最初の行からデータを取得し、それにテキストを追加するだけです。これは可能ですか?

ありがとうミリソン!これがスクリプトです(最初の部分)。

#filename = "a6_a.txt"

//defining variables called ofac and residual

unset multiplot
set term aqua enhanced font "Times-Roman,18" 

set lmargin 1
set bmargin 1
set tmargin 1
set rmargin 1
set multiplot
set size 0.8,0.37

set origin 0.1,0.08  #bottom
 set xlabel "time" offset 0,1  #bottom

 set ylabel "{/Symbol w}_i - {/Symbol w}_{i+1}"
 set yrange [-pi:pi]
 plot filename using 1:(residual($7 -$14)) ti "" pt 1 lc 2, \
            "" using 1:(residual($14-$21)) ti "" pt 1 lc 3, \
            "" using 1:(residual($21-$28)) ti "" pt 1 lc 4

set origin 0.1,0.36 #mid
 set format x ""    #mid, turn off x labeling
 set xlabel ""      #mid
 set ylabel "P_{i+1}/P_i" offset 2,0
 set yrange [*:*]
 plot filename using 1:(($10/ $3)**1.5) ti "P_2/P_1" pt 1 lc 2, \
            "" using 1:(($17/$10)**1.5) ti "P_3/P_2" pt 1 lc 3, \
            "" using 1:(($24/$17)**1.5) ti "P_4/P_3" pt 1 lc 4


set origin 0.1,0.64 #top
 set ylabel "semi-major axes"
 set yrange [*:*]
 plot filename using 1:($3):($4*$3) with errorbars ti "" pt 1 lc 1, \
   "" using 1:($10):($10*$11) with errorbars ti "" pt 1 lc 2, \
   "" using 1:($17):($17*$18) with errorbars ti "" pt 1 lc 3, \
   "" using 1:($24):($24*$25) with errorbars ti "" pt 1 lc 4

unset multiplot
unset format 
unset lmargin
unset bmargin
unset rmargin
unset tmargin
4

1 に答える 1

0

gnuplot のみを使用してこれを行うこともできますが (私はそう思います)、それは面倒です。最も簡単な解決策は、タイトルをフォーマットする外部スクリプトを作成することです。たとえば、python (未テスト) で:

#python script formatTitle.py
import sys
fname=sys.argv[1]
with open(fname,'r') as f:
    line1=f.readline().split()
    line2=f.readline().split()

pairs=sorted(zip(line1,line2)[1:])
print (", ".join("%s=%s"%(p[0],p[1]) for p in pairs))

そしてgnuplotで:

set title "`python formatTitle.py datafile.dat`"    

編集

上記のスクリプトにはいくつかの問題があります。まず、//は gnuplot のコメント文字ではありません。そのため、何らかの構文エラーがすぐに発生します。次に、filename文字列変数 (これで問題ありません) として使用していますが、どこにも定義していません。(スクリプトの最初の行は、コメント アウトされていない限り、おそらく機能します)。最後に、私はあなたのデータファイルを持っていないので確認できませんが、あなたのlmarginetc + set size+の使用はset origin(私にとって) 追跡するのが少し難しいです。頭のいい人なら問題ないでしょう。ただし、プロットを明示的に整列させたい場合は、 の 2 番目の形式を使用しmarginます。

#make plots go from 0.1 to 0.9 on the screen (screen range is 0-1)
# (0,0) is the lower left corner, (1,1) is the upper right.
set lmargin at screen 0.1
set rmargin at screen 0.9 

そして、サブプロットごとに、次のことができます。

NPLOTS=3
SCREENSIZE=0.8  #leave .1 for the top and bottom border
DY=SCREENSIZE/NPLOTS #height of each plot

#bottom
set tmargin at screen 0.9-2*DY
set bmargin at screen 0.9-3*DY
#other commands
plot ... 

#middle
set tmargin at screen 0.9-DY
set bmargin at screen 0.9-2*DY
#other commands ...
plot ...

#top
set tmargin at screen 0.9
set bmargin at screen 0.9-DY
#other commands ...
plot ...

もちろん、必要に応じて位置をいじることができます。

于 2012-06-06T20:24:37.970 に答える