plots32では速度ベクトル場のようなプロットができないので,linuxのgnuplotでベクトル場を作成. gnuplotは正直なんでもできるようなので,詳しい内容は以下のHPなどを参考に
http://www.ss.scphys.kyoto-u.ac.jp/person/yonezawa/contents/program/gnuplot/用意するデータ
今回やりたかったのは,負の固有値をもつ原子の主軸を,固有値の大きさに応じてベクトルとして表示すること. 用意したデータは
x座標,y座標,z座標,ベクトルのx成分,y成分,z成分 |
arrow0318000.e3
まずは画面上での表示
Linuxで端末を開き,gnuplot[リターン]とすればgnuplot> |
set term x11 enhanced
表示先をディスプレイに(デフォルト),下付文字などの拡張コマンドを使用できるように(enhanced)
set size ratio 1
グラフの縦横比を1:1に.縦/横の比.
p "arrow0318000.e3' u 1:2 pt 6 notitle
正式には plot "arrow0318000.e3" using 1:2 pointtype 6 notitle
マーカーの6番(○)で,指定したファイルの1列目をx,2列目をyとしてポイントプロットし, 凡例(通常指定しなければ,ファイル名が右上にマーカーとともに表示される)を出さない
p "arrow0318000.e3' u 1:2:4:5 w vec t 'x_3'
後半は正式には with vector title 'x_3'. これで,1列目をx, 2列目をyとし,(4列目,5列目)方向の矢印を表示する. 凡例をx3と表示する(enhanced指定なければx_3とそのまま表示される)
図の例を以下に
p 'arrow0318000.e3' u 1:2:4:5 w vec t 'x_3', 'arrow0318000.e2' u 1:2:4:5 w vec t 'x_2', 'arrow0318000.e1' u 1:2:4:5 w vec t 'x_1', 'arrow0318000.e1' u 1:2 pt 6 notitle |
なお,x,yの範囲を設定するのは
set xr [0.25:0.45]
set yr [0.4:0.6]
など(正式にはxrange, yrange)
目盛りの増分を設定するには
set xtics 0.1
set ytics 0.1
など.
また,x, y軸のラベルをつけるには set xlabel "Normalized position, x, nm"などするが 画面上のラベルのフォントはあまり制御できない?
表示した画面をそのままファイルに出力,というわけにいかないのが gnuplotがちょっとめんどくさいところ. svgフォーマットで出力するためには
- 出力先フォーマットの指定
- 出力先ファイル名の指定 した上で,上のようなplot作業を繰り返す(replotコマンドでもできるが)必要があるのがめんどくさい.
svgフォーマットで作成する場合の例
set term svg enhanced fsize 22 fname "Times New Roman" set out "vector.svg" |
見てわかるように,指定したフォントサイズ以外にも,違うのがマーカーの大きさ
マーカーの大きさはpointsize(またはpt)で変更するが,最小の大きさで この寸法になっている.フォントサイズのせい?
また,replotすればファイルに上書きされるかと思っていたが, set out 'test.svg'を毎回しないとreplotしても更新されなかった.
psを0.5にした結果が次
inkscapeでラベル編集を考えてsvgフォーマットにしたが, この際すべてgnuplot上でやってepsに出力するのも手.
set term postscript eps enhanced color "Times New Roman" 18 set out "test.eps" set xlabel "Normalized position, {/Times-New-Roman:Italic x}, nm" set ylabel "Noramlized position, {/Times-New-Roman:Italic y}, nm" p 'arrow0318000.e3' u 1:2:4:5 w vec t '{/Times-New-Roman:Italic x}_3', 'arrow0318000.e2' u 1:2:4:5 w vec t '{/Times-New-Roman:Italic x}_2', 'arrow0318000.e1' u 1:2:4:5 w vec t '{/Times-New-Roman:Italic x}_1', 'arrow0318000.e1' u 1:2 pt 6 ps 0.5 notitle |
inkscapeで編集する必要もないので,TeXへの貼りこみならこちらがお勧め
マーカーのサイズも画面上のと同じ感じに