ここではお絵描きの設定について紹介します
WorkStationの設定 †NCLではWorkstationを設定しないと図が書けない。NCLで出せる図の種類はps,eps,pdf,png,X11である。以降,workstationの変数をwksとする。
Workstationに関係するResources †Workstationの細かい設定は,gsn_open_wksの入力変数(上ではtype)に@でResourcesを加えていく形で設定していく。 wksの大きさ †type@wkPaperwidthF = 10 : 幅 type@wkPaperHeightF = 10 : 高さ 紙の大きさとして指定することもできる type@wkPaperSize = "A4" : デフォルトはレターサイズ 縦描き横描き †type@wkOrientation = "potrait" : 横書き type@wkOrientation = "landscape" : 縦書き 白黒 †type@wkVisualType = "monochrome" : デフォルトはcolor
XYプロット †以降,Resourcesを入れる変数をresとする。
基本的に散布図をつなげたものが描かれる。
XYプロットに関係するResources †座標の範囲 †res@trXMaxF = 1.0 ; X軸の最大値 res@trXMinF = -1.0 ; X軸の最小値 res@trYMaxF = 1.0 ; Y軸の最大値 res@trYMinF = -1.0 ; Y軸の最小値 対数軸にする †0以下の値があると使えない。maskすればOK res@trXLog = True ; X軸を対数軸に res@trYLog = True ; Y軸を対数軸に 線の太さ,線種を変える †res@xyLineThicknesses = 1.0 ; 太さ res@xyDashPatterns = 0 ; 線種(線種ごとに割り当てられた整数で指定) 線種と整数の対応は以下を参照 ※一部のresourceには~sと~Fがあるが,基本的には~sを使えば良い。~sは配列での指定にも対応しているという意味。~Fや~のみだと,複数本あったときの設定(1本目は赤、2本目は青など)ができない。 ある値に横線を引く(X軸を描く),ある値以上/以下のところを塗る †res@gsnYRefLine = 0 ; 指定したYの値のところに横線を引く(0にすればX軸が引かれる)。配列で複数指定可能。また, res@gsnYRefLineDashPatterns = (/1,0,1/) res@gsnYRefLineColors = (/"gray","black","gray"/) res@gsnYRefLineThicknesses = (/1,2,1/) で線種,色,太さが指定できる。 res@gsnAboveYRefLineColor = (/"transparent", "transparent", "red"/) ; YRefLineより上に出たところに色をぬる res@gsnBelowYRefLineColor = (/"blue", "transparent", "transparent"/) ; YRefLineより下に出たところに色をぬる が使える。 res@gsnXRefLine = 0 ; 指定したXの値のところに横線を引く(0にすればY軸が引かれる)。 折れ線から散布図や点付き折れ線にする †res@xyMarkLineModesの設定を変える。 res@xyMarkLineModes = "Markers" ; 点 res@xyMarkLineModes = "MarkLines" ; 点と線 点や線の色を変える †res@xyLineColars = "色の名前" ; 線の色 res@xyMarkerColors = "色の名前" ; 点の色 色の名前については以下を参照 点の種類や大きさを変える †res@xyMarkerSizes = 0.02 ; 点の大きさ res@xyMarker = 16 ; 点の種類(点種ごとに割り当てられた整数で指定) 点種については以下を参照 座標軸に名前をつける(等値線図などと共通) †res@tiXAxisString = "Year" ; 横軸 res@tiYAxisString = "Temperature" ; 縦軸 tiXAxis~で横軸,tiYAxis~で縦軸のラベルの設定がいろいろできる。フォントやフォントサイズ,傾き,場所などが自在に変更できる。タイトルや軸に少し詳細な説明がある。 縦軸(Y軸)、横軸(X軸)の向きを逆転する †res@trXReverse = True ; 横軸 res@trYReverse = True ; 縦軸 凡例を付ける †res@pmLegendDisplayMode = "Always" でとりあえず出るが,とても使えるもんじゃないらしい。 res@pmLegendSide = "Bottom" ; 凡例の基準位置。"Bottom"がデフォルト res@lgJustification = "BottomCenter" ; 凡例のどこを基準位置に合わせるか ; "Top","Center","Bottom"と"Left","Center","Right"の組合せで指定 ; "BottomCenter"がデフォルト res@pmLegendOrthogonalPosF = 0.03 ; pmLegendSideに対して直交する向きの位置 ; viewportの中央から離れる向きが正 ; すなわち res@pmLegendSide = "Bottom" (デフォルト)のとき,タテ方向の位置を指定し,下向きが正となる。 res@pmLegendParallelPosF = 1.0 ; pmLegendSideに対して平行する向きの位置 ; NDCが増加する向きが正 ; すなわち res@pmLegendSide = "Bottom" (デフォルト)のとき,ヨコ方向の位置を指定し,右向きが正となる。 res@pmLegendWidthF = 0.18 ; 幅 res@pmLegendHeightF = 0.2 ; 高さ res@xyExplicitLegendLabels = (配列) ; 凡例のラベル 他にも関数gsn_create_legendで作ってgsn_add_annotationでplotすることも可能。xy2プロットなどxyプロットではない方法の場合はこちらでやる他ない。もしくは図形や文字を直接描くことで対応する。 地図 †緯度・経度の情報がついているデータは,gsn_~_map_~のような関数を使って地図上にプロットすることができる。 ※lat,lonに関して
投影法はいくつか用意されているが,基本的にはmpProjectionで指定することができる。しかし,正距円筒図法(LAT-LONの格子),極投影図法については,もっと単純なやり方でできる。 正距円筒図法(Cylindrical Equidistant) †正距円筒図法はNCLで最も一般的な図法であり,gsn_~_map_ceという関数を用いることができる。例えば,gsn_csm_contour_map_ce は以下のように用いる。
極投影図法(Polar Stereographic) †極中心の場合には,gsn_~_map_polarという関数を用いることができる。例えば,正距円筒図法のgsn_csm_contour_map_ceに対応するものとして,gsn_csm_contour_map_polarがある。
res@gsnPolar = "NH" で北極中心, その他の図法 †res@mpProjection = "図法" で設定する。 地図に関係するResources †地図の範囲設定 †res@mpMinLatF = -60 ; 緯度の最小値 res@mpMaxLatF = 60 ; 緯度の最大値 res@mpMinLonF = 120 ; 経度の最小値 res@mpMaxLonF = 300 ; 経度の最大値 緯度経度の中心値で与えることもできる res@mpCenterLatF = 30 ; 緯度の中心 res@mpCenterLonF = 180 ; 経度の中心 ランベルト円錐図法の場合は次を使う res@mpLambertMeridianF = 135 極投影図においては, res@gsnPolar = "NH" ; 北極中心 res@gsnPolar = "SH" ; 南極中心 res@mpCenterLonF = 90 ; "NH"のとき6時の方向が90°E,"SH"のとき12時の方向が90°E 地図の描画設定 †res@mpFillOn = True ; 地図を塗りつぶす res@mpGeophysicalLineColor = "Green" ; 地図の線の色 res@mpGeophysicalLineThicknessF = 2 ; 地図の線の太さ res@mpGeophysicalLineDashPattern = 0 ; 地図の線の線種 地図とプロットの上下関係の設定 †地図と等値線やシェードなどをどういう順番で描くかを設定する res@cnFillDrawOrder = "PreDraw" にすると,シェードが下になって陸地が上に来る。つまり、海だけが塗りつぶされる。 res@cnFillDrawOrder = "PostDraw" にすると,陸地の上にシェードを書くことになって陸地が隠れる。
地図上の格子の設定 †res@mpGridAndLimbOn = True ; 格子を入れる res@mpGridLatSpacingF = 15 ; 緯度方向の間隔 res@mpGridLonSpacingF = 15 ; 経度方向の間隔 res@mpGridLineColor = "Red" ; 格子の線の色 res@mpGridLineThicknessF = 1.5 ; 格子の線の太さ res@mpGridLineDashPattern = 1 ; 格子の線の線種 地図の海岸線の解像度の設定 †地図の海岸線の解像度は,res@mpDataBaseVersionで変更することができる。デフォルトでは, res@mpDataBaseVersion = "LowRes" ; 低解像度,V6.4.0より前のデフォルト res@mpDataBaseVersion = "MediumRes" ; 中解像度 が選択可能。バージョン6.4.0以降では,何も指定しなければ適切だと思われる方が自動選択される。 res@mpDataBaseVersion = "HighRes" ; 高解像度 を利用したい場合,https://www.io-warnemuende.de/rangs-en.htmlより,海岸線データ(rangs(?).zip および gshhs(?).zip)を全てダウンロード・解凍し,$NCARG_ROOT/lib/ncarg/database/rangs あるいは $NCARG_RANGS の下にファイルを置く。なお,NCLはShapefile比較的簡単に扱うことができるので(ncl_filedumpでも.shpファイルを読むことができる),各自でShapefileを作成・入手できれば,海岸線や河川など多様な地図を描画可能だ。 等値線(contour) †等値線やシェードのプロットは,gsn_~_contour_~のような関数を使ってプロットすることができる。地図上にプロットしたい場合は,上でも述べたgsn_~_contour_map~のような関数を用いる。 等値線に関係するResources †res@cnLinesOn = True のとき等値線が引かれる(デフォルトでTrueになっている)。 等値線を引く値の設定 †等値線の設定の仕方にはいくつかある。デフォルトでは res@cnLevelSelectionMode = "AutomaticLevels" になっており,自動で描かれる。 res@cnLevelSelectionMode = "ManualLevels" とする。このとき, res@cnMinLevelValF = -10 ; 等値線の最小値 res@cnMaxLevelValF = 40 ; 等値線の最大値 res@cnLevelSpacingF = 2 ; 等値線の間隔 不均一な間隔で設定したい場合には, res@cnLevelSelectionMode = "ExplicitLevels" とし, res@cnLevels = (/1.,2.,4.,8.,16./) ; 配列で等値線レベルを指定 とできる 等値線の線種・太さ・色 †res@cnLineDashPatern = 1 ; 等値線の線種 res@cnLineThicknessF = 2 ; 等値線の太さ res@cnLineColor = "red" ; 等値線の色 正負で等値線を変える †res@gsnContourNegLineDashPattern = 1 ; 負の等値線の線種 res@gsnContourPosLineDashPattern = 0 ; 正の等値線の線種 res@gsnContourZeroLineThicknessF = 0 ; ゼロの等値線の太さ(0にすると描かれない) 等値線のラベルを消す(つける) †res@cnLineLabelsOn = False とすると等値線のラベルが消える。Trueのとき,ラベルに関してもいろいろ設定ができる。例えば, res@cnLineLabelInterval = 5 ; 等値線のラベルをつける間隔(この場合5本ごと) res@cnLineLabelFontHeightF = 0.01 ; ラベルの文字の大きさを変える res@cnLineLabelDensityF = 2.0 ; 同一等値線上のラベルの数を変える 右下の等値線情報を消す(つける) †res@cnInfoLabelOn = False とすると左下の等値線の情報が消える。Trueのとき,等値線情報に関してもいろいろ設定ができる。例えば, res@cnInfoLabelSide = "Bottom" ; スケールの基準位置 ; "Top","Bottom"(デフォルト),"Left","Right"のいずれかで指定 res@cnInfoLabelJust = "TopRight" ; スケールのどこを基準位置に合わせるか ; "Top","Center","Bottom"と"Left","Center","Right"の組合せで指定 ; "TopRight"がデフォルト res@cnInfoLabelOrthogonalPosF = 0.03 ; cnInfoLabelSideに対して直交する向きの位置 ; viewportの中央から離れる向きが正 ; すなわち res@cnInfoLabelSide = "Bottom" (デフォルト)のとき,タテ方向の位置を指定し,下向きが正となる。 res@cnInfoLabelParallelPosF = 1.0 ; cnInfoLabelSideに対して平行する向きの位置 ; NDCが増加する向きが正 ; すなわち res@cnInfoLabelSide = "Bottom" (デフォルト)のとき,ヨコ方向の位置を指定し,右向きが正となる。 res@cnInfoLabelPerimOn = False ; 枠を消す res@cnInfoLabelFontHeightF = 0.015 ; 文字の大きさを変える また,等値線情報に書かれる内容は,cnInfoLabelString=(文字列) として変えられる。このとき,例えば$CIU$が等値線間隔,$CMN$が最小の値,$CMX$が最大の値を示す。デフォルトは, res@cnInfoLabelString = "CONTOUR FROM $CMN$ TO $CMX$ BY $CIU$" である。 シェード †等値線やシェードのプロットは,gsn_~_contour_~のような関数を使ってプロットすることができる。地図上にプロットしたい場合は,上でも述べたgsn_~_contour_map~のような関数を用いる。 res@cnFillOn = True のときシェードで描かれる(デフォルトでFalseになっている)。
シェードに関係するResources †塗りつぶしのパターンを変える †塗りつぶしのパターンは res@cnFillPatern = 4 ; パターン(パターンごとに割り当てられた整数で指定) で変更できる。パターンの種類は以下を参照 グリッドごとに塗りつぶす †デフォルトでは滑らかに引かれた等値線の間を塗りつぶすようにシェードが描かれるが,GrADSでいうところのset gxout grfillに対応する塗り方(グリッドごとに塗りつぶすこと)ももちろんできる。 res@cnFillMode = "AreaFill" となっているところを, res@cnFillMode = "CellFill" に変更する。 カラーマップの指定 †カラーマップはWorkstationに対して指定することもできるし,Plot Resourceを通して指定することもできる。
res@cnFillPalette = "ncl_default" ; シェードのカラーマップ res@cnLinePalette = "ncl_default" ; 等値線に対しても指定できる のように指定する。色の名前の1次元配列かRGB値またはRGBA値の2次元配列(色数×3or4)でも指定できる。 res@cnFillColors = "色の配列" を使うこともできるが,cnLevelsで指定した配列の大きさと整合するように。
カラーマップをRGB値の配列として取得する †カラーマップをRGB値の配列として取得するためには,
を用いる。これをres@cnFillPaletteに入れることができる。 カラーマップの一部を使う,反転させる †上のように,read_colormap_fileでRGB値の配列を得ることができる。したがって,この出力変数color_map(色数をNとする)を使って, N = dimsizes(colormap(:,0)) res@cnFillPalette = color_map(0:N/2,:) ; カラーマップの前半のみ res@cnFillPalette = color_map(::2,:) ; 1つおき res@cnFillPalette = color_map(::-1,:) ; 反転 のようにできる。
res@gsnSpreadColors = True とし, res@gsnSpreadColorStart = 10 ; カラーインデックスで指定 res@gsnSpreadColorEnd = -10 ; 負にすると最後の色からの位置で指定できる ともできる。gsnSpreadColorStartのデフォルトは2(前述のように0, 1は白と黒だから),gsnSpreadColorEndのデフォルトは-1(最後から1番目)である。gsnSpreadColorStartがgsnSpreadColorEndよりも後にある場合には,カラーマップが反転する。 カラーバーを消す(つける) †res@lbLabelBarOn = False でカラーバーが消える。 res@lbLabelBarOn = True として,さらに以下のようにいろいろ設定することもできる。 res@lbOrientation = "Vertical" ; タテ置き res@lbOrientation = "Horizontal" ; ヨコ置き res@lbLabelFontHeightF = 0.02 ; ラベルの文字の大きさ res@pmLabelBarSide = "Bottom" ; バーの基準位置。"Bottom"がデフォルト res@lbJustification = "CenterCenter" ; バーのどこを基準位置に合わせるか ; "Top","Center","Bottom"と"Left","Center","Right"の組合せで指定 ; "CenterCenter"がデフォルト res@pmLabelBarOrthogonalPosF = 0.02 ; pmLabelBarSideに対して直交する向きの位置 ; viewportの中央から離れる向きが正 ; すなわち res@pmLabelBarSide = "Bottom" (デフォルト)のとき,タテ方向の位置を指定し,下向きが正となる。 res@pmLabelBarParallelPosF = 0.5 ; pmLabelBarSideに対して平行する向きの位置 ; NDCが増加する向きが正 ; すなわち res@pmLabelBarSide = "Bottom" (デフォルト)のとき,ヨコ方向の位置を指定し,右向きが正となる。 res@pmLabelBarWidthF = 0.6 ; バーの幅 res@pmLabelBarHeightF = 0.15 ; バーの高さ Version6.4.0以降では,両端の形を三角形にできるらしい。 res@lbBoxEndCapStyle = "RectangleEnds" ; いつもの四角形 res@lbBoxEndCapStyle = "TriangleLowEnd" ; 低い方が三角形 res@lbBoxEndCapStyle = "TriangleHighEnd" ; 高い方が三角形 res@lbBoxEndCapStyle = "TriangleBothEnds" ; どっちも三角形 カラーバーにタイトルをつける †res@lbTitleOn = True とし, res@lbTitleString = "Title" ; もちろん文字列の変数でも良い res@lbTitlePosition = "Right" ; タイトルのカラーバーに対する位置 res@lbTitleDirection = "Across" ; タイトルの文字がヨコ方向 res@lbTitleDirection = "Down" ; タイトルの文字がタテ方向 res@lbTitleFontHeightF = 0.025 ; タイトルの文字の大きさ でいろいろできる。 ベクトル(vector) †ベクトルのプロットは,gsn_~_vector_~のような関数を使ってプロットすることができる。地図上にプロットしたい場合は,上でも述べたgsn_~_vector_map~のような関数を用いる。
ベクトルに関係するResources †ベクトルの種類 †NCLには4種類のベクトルが存在する。それぞれ以下のように設定する。 res@vcGlyphStyle = "LineArrow" ; 矢印型の線でできたもの res@vcGlyphStyle = "FillArrow" ; 矢印型の図形でできたもの res@vcGlyphStyle = "WindBarb" ; 風矢羽根 res@vcGlyphStyle = "CurlyVector" ; 曲がった矢印 デフォルトでは"LineArrow"となっている。個人的には"FillArrow"で細かく設定するのが好き。"LineArrow"から"FillArrow"への変更は, res@vcFillArrowsOn = True でも可能。 座標とベクトルの位置関係 †NCLではデフォルトでベクトルの真ん中がそのデータの座標に対応しているが,これも変更可能である。 res@vcPositionMode = "ArrowHead" ; ベクトルのあたま res@vcPositionMode = "ArrowCenter" ; ベクトルの真ん中 res@vcPositionMode = "ArrowTail" ; ベクトルのしっぽ ベクトルの長さ †例えば風速[m/s]を描くとき, res@vcRefMagnitudeF = 1.0 で1m/sが基準となるベクトルとなる。この基準となるベクトルの長さを決めるには, res@vcRefLengthF = 0.01 ; 数字はWork Stationの横の長さ対して何割かを示す とする(0から1の間で指定する)。 ベクトルの長さと値の対応は,等値線と同じようなやり方でもできる。 res@vcLevelSelectionMode = "ManualLevels" res@vcMaxLevelValF = 10 res@vcMinLevelValF = 1 res@vcLevelSpacingF = 2 ベクトルのスケールを消す(つける) †res@vcRefAnnoOn = False でベクトルのスケールが消える。 res@vcRefAnnoOn = True として,さらに以下のようにいろいろ設定できる。 res@vcRefAnnoArrowAngleF = 0.0 ; スケールベクトルの角度。デフォルトは0度(右向き)。 res@vcRefAnnoSide = "Bottom" ; スケールの基準位置。"Bottom"がデフォルト res@vcRefAnnoJust = "TopRight" ; スケールのどこを基準位置に合わせるか ; "Top","Center","Bottom"と"Left","Center","Right"の組合せで指定 ; "TopRight"がデフォルト res@vcRefAnnoOrthogonalPosF = 0.03 ; vcRefAnnoSideに対して直交する向きの位置 ; viewportの中央から離れる向きが正 ; すなわち res@vcRefAnnoSide = "Bottom" (デフォルト)のとき,タテ方向の位置を指定し,下向きが正となる。 res@vcRefAnnoParallelPosF = 1.0 ; vcRefAnnoSideに対して平行する向きの位置 ; NDCが増加する向きが正 ; すなわち res@vcRefAnnoSide = "Bottom" (デフォルト)のとき,ヨコ方向の位置を指定し,右向きが正となる。 res@vcRefAnnoBackgroundColor = "red" ; 背景色 Annotation中の文字列に関しては, res@vcRefAnnoFontHeightF = 0.02 ; フォントの大きさ res@vcRefAnnoString1On = True ; スケールベクトルの上部の文字列を有効にする res@vcRefAnnoString1 = "$RFM$"+u@units ; デフォルトは"$VMG$" res@vcRefAnnoString2On = True ; スケールベクトルの下部の文字列を有効にする res@vcRefAnnoString2 = "wind" ; デフォルトは"Reference Vector" で設定する。なお,$VMG$はAnnotationのベクトルが表す長さ,$RFM$はプロットする際の基準長(RefMagnutude)の値を表す。このほかには,最小の長さを示す$MNM$,最大の長さを示す$MXM$などがある。 また,枠線の設定は, res@vcRefAnnoPerimOn = True res@vcRefAnnoPerimThicknessF = 2 res@vcRefAnnoPerimColor = "blue" 等で可能。 ベクトルを間引く †変数の配列を間引いてもよいが, res@vcMinDistanceF = 0.001 としてもベクトル同士の間隔を変えることができる。極投影図などの場合,経度方向に等間隔だと極付近でベクトルが密になりすぎてしまうが,これを設定しておけば適切に間引かれる。 ベクトルのデザインにこだわりたい †ベクトルのデザインに関する細かい設定に用いるResourcesを紹介する。NCLでは基本的に,ベクトルの頭の長さや幅がベクトル自体の長さでスケーリングされることに注意しよう。 LineArrowのデザインの設定は以下で可能である。 res@vcLineArrowColor = "purple" ;; 色 res@vcLineArrowThicknessF = 5 ;; 太さ res@vcLineArrowHeadMinSizeF = 0.005 ;; 矢印の頭を形成する線の最小長をビューポート幅に対する比で表したもの。 ; 短いベクトルでも頭が小さくなり過ぎないようにするための値。 res@vcLineArrowHeadMaxSizeF = 0.05 ;; 矢印の頭を形成する線の最大長をビューポート幅に対する比で表したもの。 ; 長いベクトルでも頭が大きくなり過ぎないようにするための値。 しかし,デザインを気にするならFillArrowを用いるのが良いだろう。 res@vcFillArrowFillColor = "pink" ;; 矢印の色 res@vcFillArrowWidthF = 0.1 ;; 矢印の太さ res@vcFillArrowHeadXF = 0.5 ;; 頭の長さ(外側)。ベクトルの長さに対する比で,0~2の範囲で与える。 ; この比はベクトルの長さに対して不変である。 res@vcFillArrowHeadYF = 0.25 ;; 頭の幅。ベクトルの長さに対する比で,0~1の範囲で与える。 ; 頭の長さに比例して調節される。 ; vcFillArrowHeadMinFracYFとvcFillArrowMinFracWidthFの両方が0であるとき, ; 頭の幅の長さに対する比は,ベクトルの長さに対して不変である。 ; 細かいことだが,矢印の軸部分の幅は含まれない。 res@vcFillArrowHeadInteriorXF = 0.25 ;; 頭の長さ(内側)。ベクトルの長さに対する比で,0~1の範囲で与える。 ; 頭の長さに比例して調節される。 res@vcFillArrowEdgeColor = "purple" ;; 枠線の色 res@vcFillArrowEdgeThicknessF = 10 ;; 枠線の太さ res@vcFillArrowMinFracWidthF = 1. ;; 最小の長さで描かれた矢印の幅のvcFillArrowWidthFに対する比。 ; 0~1の範囲で与え,1のとき,長さに関わらず同じ幅で描かれる。 res@vcFillArrowHeadMinFracXF = 0.2 ;; 最小の長さで描かれた矢印の頭の長さのvcFillArrowHeadXFに対する比。 ; 0~1の範囲で与え,1のとき,長さに関わらず同じ頭の長さで描かれる。 res@vcFillArrowHeadMinFracYF = 0.2 ;; 最小の長さで描かれた矢印の頭の幅のvcFillArrowHeadXFに対する比。 ; 0~1の範囲で与え,1のとき,長さに関わらず同じ頭の幅で描かれる。 下の図も参考にしてほしい。
res@vcMonoLineArrowColor = False あるいは res@vcMonoFillArrowFillColor = False によって単色での描画を解除し, res@vcLevelPalette = "default" ; カラーマップの名前やRGB/RGBA値の配列 でカラーマップを指定することが一つの方法である。 タイトルや軸 †図のタイトルや軸は主にti(Title)Resourcesとtm(Tickmark)Resourcesを用いて設定を行う。 タイトルに関するResources †タイトルを書く †res@tiMainString = "This is the TITLE" タイトルの位置を変える †基準位置は, res@tiMainPosition = "Left" ; Viewportの左端 res@tiMainPosition = "Center" ; Viewportの中央 (デフォルト) res@tiMainPosition = "Right" ; Viewportの右端 および, res@tiMainSide = "Top" ; Viewportの上端 (デフォルト) res@tiMainSide = "Bottom" ; Viewportの下端 で設定する。基準位置からの微調整は, res@tiMainOffsetXF = 0.05 ; x軸方向 res@tiMainOffsetYF = -0.05 ; y軸方向 によってNDC座標で設定する。 res@tiMainJust = "TopLeft" ; 左上 res@tiMainJust = "TopCenter" ; 真ん中上 res@tiMainJust = "TopRight" ; 右上 res@tiMainJust = "CenterLeft" ; 左真ん中 res@tiMainJust = "CenterCenter" ; ど真ん中 (デフォルト) res@tiMainJust = "CenterRight" ; 右真ん中 res@tiMainJust = "BottomLeft" ; 左下 res@tiMainJust = "BottomCenter" ; 真ん中下 res@tiMainJust = "BottomRight" ; 右下 で設定する。 タイトルの文字の色や大きさ †res@tiMainFontHeightF = 0.03 ; タイトルの文字の大きさ res@tiMainFontThicknessF = 3. ; タイトルの文字の太さ res@tiMainFontColor = 1 ; タイトルの色 タイトルの文字の向き †res@tiMainDirection = "Down" ; タテ向き res@tiMainDirection = "Across" ; ヨコ向き (デフォルト) 図の左上や右上の小タイトルを設定する †タイトルとは別に図の左上や右上に文字列を書くことができる。 res@gsnLeftString = "LeftString" ; デフォルトは描画した変数の@long_name res@gsnRightString = "RightString" ; デフォルトは描画した変数の@units 小タイトルの文字の大きさや色 †res@gsnLeftStringFontHeightF = 0.025 res@gsnRightStringFontHeightF = 0.025 res@gsnLeftStringFontColor = "blue" res@gsnRightStringFontColor = "blue" 小タイトルの位置 †res@gsnLeftStringOrthogonalPosF = 0.02 res@gsnRightStringOrthogonalPosF = 0.02 res@gsnLeftStringParallelPosF = 0.2 res@gsnRightStringParallelPosF = 0.8 軸に関するResources †軸の描画 †res@tmXBBorderOn = True ; ヨコ軸下側の軸を描く res@tmXTBorderOn = True ; ヨコ軸上側の軸を描く res@tmYLBorderOn = True ; タテ軸左側の軸を描く res@tmYRBorderOn = True ; タテ軸右側の軸を描く 軸の太さや色 †res@tmBorderLineColor = "black" ; 枠線の色 res@tmBorderThicknessF = 2 ; 枠線の太さ(デフォルトは2) 軸ラベルやティック(棒) †軸ラベルやティック(棒)を描画するかしないかの設定。ラベルは主目盛のティックにつく。 res@tmXBOn = True ; ヨコ軸下側のティック(主目盛)を描く res@tmXTOn = False ; ヨコ軸上側のティック(主目盛)を描かない res@tmYLOn = True ; タテ軸左側のティック(主目盛)を描く res@tmYROn = False ; タテ軸右側のティック(主目盛)を描かない res@tmXBMinorOn = False ; ヨコ軸下側のティック(補助目盛)を描かない res@tmXTMinorOn = False ; ヨコ軸上側のティック(補助目盛)を描かない res@tmYLMinorOn = True ; タテ軸左側のティック(補助目盛)を描く res@tmYRMinorOn = False ; タテ軸右側のティック(補助目盛)を描かない res@tmXBLabelsOn = True ; ヨコ軸下側のラベルを描く res@tmXTLabelsOn = False ; ヨコ軸上側のラベルを描かない res@tmYLLabelsOn = True ; タテ軸左側のラベルを描く res@tmYRLabelsOn = False ; タテ軸右側のラベルを描かない ティックやラベルの間隔などの設定の仕方は, res@tmXBMode = "Manual" ; ヨコ軸下側のティックの設定の仕方 res@tmXTMode = "Manual" ; ヨコ軸上側のティックの設定の仕方 res@tmYLMode = "Manual" ; タテ軸左側のティックの設定の仕方 res@tmYRMode = "Manual" ; タテ軸右側のティックの設定の仕方 ; "Automatic"(デフォルト),"Manual","Explicit"から選択 で指定することができる。"Manual"の場合,例えばヨコ軸下側(XB)であれば,次のように設定可能。 res@tmXBTickStartF = 10 ; 最初のティックの値 res@tmXBTickEndF = 50 ; 最後のティックの値 res@tmXBTickSpacingF = 5 ; ティック(主目盛)の間隔 res@tmXBMinorPerMajor = 4 ; 主目盛の間に入る補助目盛の本数 ; この場合,10から50まで5間隔で主目盛が,1間隔で補助目盛が描かれる 一方,"Explicit"の場合,例えばヨコ軸下側(XB)であれば,次のように設定可能。 res@tmXBValues = (/10,20,40,80/) ; 主目盛のティックをつける値 res@tmXBMinorValues = (/15,25,30,35,50,60,70/) ; 補助目盛のティックをつける値 res@tmXBLabels = (/"10N","20N","40N","80N"/) ; ラベル。res@tmXBValuesと同じ要素数。 なお,正距円筒図法の地図の場合,主目盛の間隔は, res@gsnMajorLatSpacing = 30 res@gsnMajorLonSpacing = 60 補助目盛の間隔は, res@gsnMinorLatSpacing = 5 res@gsnMinorLonSpacing = 10 にて設定可能。 ティックの大きさや色 †ヨコ軸下側(XB)のティックの大きさや色などを設定する場合, res@tmXBMajorThicknessF = 2 ; ティック(主目盛)の太さ。デフォルトは2。 res@tmXBMajorLineColor = "black" ; ティック(主目盛)の色 res@tmXBMajorLengthF = 0.01 ; ティック(主目盛)の長さ。NDC座標で与える。 ; デフォルトはviewportの高さ0.6に対して0.02。 res@tmXBMajorOutwardLengthF = 0.01 ; ティック(主目盛)が軸を横切ってのびる部分の長さ。NDC座標で与える。 ; デフォルトは0で,軸に接して横切らない。 res@tmXBMinorThicknessF = 1 ; ティック(補助目盛)の太さ。デフォルトは1。 res@tmXBMinorLineColor = "black" ; ティック(補助目盛)の色 res@tmXBMinorLengthF = 0.008 ; ティック(補助目盛)の長さ。NDC座標で与える。 ; デフォルトはviewportの高さ0.6に対して0.01 res@tmXBMinorOutwardLengthF = 0.008 ; ティック(補助目盛)が軸を横切ってのびる部分の長さ。NDC座標で与える。 ; デフォルトは0で,軸に接して横切らない。 軸ラベルの大きさや色 †ヨコ軸下側(XB)のラベルの文字の大きさや色などを設定する場合, res@tmXBLabelFontHeightF = 0.018 ; ラベルの文字の大きさ(デフォルトはviewportの高さ0.6に対して0.02) res@tmXBLabelFontColor = "black" ; ラベルの文字の色 res@tmXBLabelAngleF = 45 ; ラベルの文字の回転角(デフォルトは0で回転なし) res@tmXBPrecision = 3 ; ラベルの数値の桁数 グリッド線 †グリッド線を引く場合は,以下のようにする。 res@tmXMajorGrid = True ; ヨコ軸の主目盛にあわせてグリッド線を引く res@tmXMinorGrid = True ; ヨコ軸の補助目盛にあわせてグリッド線を引く res@tmYMajorGrid = True ; タテ軸の主目盛にあわせてグリッド線を引く res@tmYMinorGrid = True ; タテ軸の補助目盛にあわせてグリッド線を引く 太さや色の設定は,例えばヨコ軸主目盛(XMajor)の場合, res@tmXMajorGridThicknessF = 2 ; 太さ res@tmXMajorGridLineColor = "black" ; 色 res@tmXMajorGridLineDashPattern = 0 ; 線種 とする。グリッドとxyプロットなどとの前後関係を変更するには, res@tmGridDrawOrder = "PreDraw" ; v6.5.0以降で使用可能 ; "PreDraw","Draw","PostDraw"(デフォルト) から選択 を用いる。 複数枚を並べる †複数枚の図を一度にplotする方法にはいくつかあるが,最も基本的なものは,gsn_panelというprocedureを用いる方法である。 gsn_panelを用いる方法とそれに関するResources †この方法では,まず1枚1枚の絵を作り,それらを配列にまとめてgsn_panelに渡す。ただし,この手法は並べる絵のサイズが異なる場合にはうまくいかないので注意。 res@gsnDraw = False ; gsnの関数が呼ばれた際に絵を描かない res@gsnFrame = False ; gsnの関数が呼ばれた際にWorkStationの更新を行わない としておくのを忘れないように。
パネルプロットの並べ方の指定の仕方を変更する †デフォルトでは,行と列の数で指定する。 resP@gsnPanelRowSpec = False ; 行数×列数で指定する gsn_panel(wks, plot, (/3,2/), resP) ; 縦3枚,横2枚のパネルプロット 各行の枚数で指定することも可能で, resP@gsnPanelRowSpec = True ; 各行の枚数で指定する gsn_panel(wks, plot, (/1,3,2/), resP) ; 3行のパネルプロット,1行目が1枚,2行目が3枚,3行目が2枚 のようにする。この場合,デフォルトでは各行で図はセンタリングされて配置される。 resP@gsnPanelCenter = False とすると,各行で図は左詰めで配置される。 パネル全体で一つのタイトルをつける †6.3.0以前のバージョンでは,図中に文字を挿入するTextItem Resources(tx...)を用いる。 resP@txString = "Title" で指定する。フォントサイズ等の変更は, resP@txFontHeightF = 0.04 ; フォントサイズ resP@txPosXF = 0.5 ; X方向の位置,NDCで指定(左下が(0,0),右上が(1,1)) resP@txPosYF = 0.8 ; Y方向の位置,NDCで指定 で可能。 6.4.0以降のバージョンでは,パネルプロットのタイトル用に用意されているGSN Resources(gsnPanelMain...)を用いる。 resP@gsnPanelMainString = "Title" で指定する。フォントサイズ等の変更は, resP@gsnPanelMainFontHeightF = 0.04 ; フォントサイズ resP@gsnPanelMainPosXF = 0.5 ; X方向の位置,NDCで指定(左下が(0,0),右上が(1,1)) resP@gsnPanelMainPosYF = 0.8 ; Y方向の位置,NDCで指定 で可能。 パネル全体で一つのカラーバーをつける †個々のplotをつくる際に, res@lbLabelBarOn = False としておき,gsn_panelを実行する際に, resP@gsnPanelLabelBar = True とすると,パネル全体で一つのカラーバーをつけることができる。 パネル内の図同士の間隔を調整する †resP@gsnPanelXWhiteSpacePercent = 5. ; 図同士のヨコ方向の間隔をあける(図の幅の5%) resP@gsnPanelYWhiteSpacePercent = 8. ; 図同士のタテ方向の間隔をあける(図の高さの8%) パネル全体に余白をつくる †パネルプロットの外に文字を入れたい場合,カラーバーがはみ出してしまう場合,描画範囲の中の一部だけをgsn_panelを使ったパネルプロットにしたい場合, 同じ紙面上で複数のパネルプロットを組み合わせたい場合など,パネルプロットが描かれる範囲を制限したい場合には以下のResourcesを用いる。 resP@gsnPanelBottom = 0.05 ; 0~1で設定。この場合,パネルプロットの下から0.05(ページ全体の5%)までが余白となる resP@gsnPanelLeft = 0.5 ; 左側を半分空ける resP@gsnPanelRight = 0.5 ; 右側を半分空ける resP@gsnPanelTop = 0.9 ; 上側10%を空ける 各図に番号や記号(a, b, c,... など)をつける †resP@gsnPanelFigureStrings = (/"a","b","c","d","e","f"/) とすると各図にaからfまでの記号がつく。細かい設定は, resP@gsnPanelFigureStringsFontHeightF = 0.04 ; 文字の大きさ resP@gsnPanelFigureStringsPerimOn = True ; 枠線のありなし resP@gsnPanelFigureStringsBackgroundFillColor = "red" ; 文字の背景の色 で可能。文字の位置は,6.4.0以降のバージョンでは,専用のGSN Resourceである resP@gsnPanelFigureStringsJust = "TopLeft" ; 左上 を使う。6.3.0以前のバージョンでは,Annotation Manager Resourceである resP@amJust = "TopLeft" ; 左上 で変更可能。 gsn_attach_plotsを用いる方法とそれに関するResources †複数の図を縦あるいは横にくっつけて並べる場合には,関数gsn_attach_plotsが使える。この方法でも,まずは1枚1枚の図を作り,それを関数に渡してまとめて1枚の図にすることができる。したがって,この場合も1枚1枚の絵を作る際に, res@gsnDraw = False res@gsnFrame = False としておくのを忘れないように。
gsn_attach_plotsでの図の並べ方の設定 †デフォルトでは, res_base@gsnAttachPlotsXAxis = False ; y軸をくっつけていく となっており,絵が横に並ぶ。 res_base@gsnAttachPlotsXAxis = True ; x軸をくっつけていく とすれば絵が縦に並ぶ。 res_base@gsnAttachBorderOn = True ; 境界線を描く となっているが, res_base@gsnAttachBorderOn = False ; 境界線を描かない として図と図の間の境界線を消すことが可能。 個々の図に対して位置と大きさを指定する方法とそれに関するResources †図の位置やサイズを直接指定するには,以下のView port Resourcesを用いる。 res@vpXF = 0.2 ; 図の左端の座標 res@vpYF = 0.8 ; 図の上端の座標 res@vpWidthF = 0.6 ; 図の幅 res@vpHeightF = 0.3 ; 図の高さ 数値はNDC(左下が(0,0),右上が(1,1)となるような座標)で与える。 図を重ねる †基本的にはoverlayを用いて複数の図(例えばシェードとコンターなど)を重ねる。 overlayを用いて図を重ねる †複数の図を重ねる場合にはprocedure overlayを用いるのが一般的である。
res@gsnDraw = False res@gsnFrame = False res2@gsnDraw = False res2@gsnFrame = False としておくことを忘れずに。そうしなければoverlayする前に絵が描画されてしまう。overlayした後,draw(plot)を実行して絵を描き,WorkStationの変数がwksならframe(wks)でフレームの更新を行うことが一般的な使い方だろう。
ある値以上/以下の領域にハッチなどをかける †ある値以上/以下の領域をハッチや点描で重ねて示すには,関数ShadeGtContourなどを用いる。これらの関数は,gsn_csm_contour_mapなどで作られた既存のgraphic型変数を変更する形で用いる。具体的な使い方については,スクリプト例:SSTトレンドも参照のこと。
図形や文字を描く †gsn_csm_~のような関数で作成したプロットに線や図形,文字を重ねるには以下の関数を用いる。この場合,座標はプロット上の座標(例えば地図であれば緯度や経度)で指定する。
図形や文字に関係するResources †線や図形に関する設定はgs(graphics styles) resourcesを通して行う。 res@gsLineColor = "green" ; 線の色 res@gsLineThicknessF = 3.0 ; 線の太さ res@gsLineDashPattern = 1 ; 線種 res@gsFillColor = "purple" ; 図形の塗りつぶしの色 res@gsFillOpacity = 0.3 ; 図形の塗りつぶしの不透明度。0(完全に透明)から1(完全に不透明)までで与える。 res@gsFillIndex = 2 ; 図形の塗りつぶしのパターン。デフォルトは0(ベタ塗り) res@gsMarkerIndex = 16 ; マーカーの種類 res@gsMarkerSizeF = 0.02 ; マーカーの大きさ(デフォルトは0.007) res@gsMarkerColor = "yellow" ; マーカーの色 線や図形とプロットとの前後関係を変更するには, res@tfPolyDrawOrder = "PreDraw" ; "PreDraw","Draw","PostDraw"(デフォルト) から選択 で行う。文字に関する設定はtx(text) resourcesを通して行う。 res@txFontHeightF = 0.016 ; 文字の大きさ res@txFontColor = "orange" ; 文字の色 文字列の位置を指定する際に,文字列のどこを基準位置とするかは以下で設定できる。 res@txJust = "TopLeft" ; 左上 res@txJust = "TopCenter" ; 真ん中上 res@txJust = "TopRight" ; 右上 res@txJust = "CenterLeft" ; 左真ん中 res@txJust = "CenterCenter" ; ど真ん中 (デフォルト) res@txJust = "CenterRight" ; 右真ん中 res@txJust = "BottomLeft" ; 左下 res@txJust = "BottomCenter" ; 真ん中下 res@txJust = "BottomRight" ; 右下 NDCの格子を描く †様々な図に関する設定において,一時的にNDC(Normalized Device Coordinates)を図に重ねて表示しておくと便利なことがある。NDCは左下が(0,0),右上が(1,1)となるような座標である。
なお,プロット上の座標からNDCへの変換はdatatondc,NDCからプロット上の座標への変換はndctodataにより行うことができる。 |