# GrADS
## 檔案格式
使用
```
ga-> open filename.ctl
```
以打開 .dat 檔案,或
```
ga -> sdfopen filename.nc
```
### .ctl 檔案的內容
```
DSET ^filename.dat
TITLE content of data
UNDEF 99999.
XDEF 360 LINEAR 0 1
YDEF 91 LINEAR -90 1
ZDEF 3 levels 1000 850 700
TDEF 12 LINEAR 01JAN2010 1mo
VARS 3
var1 1 99 var1 content
var2 1 99 var2 content
var3 1 99 var3 content
ENDVARS
```
### 檔案的內容
在 GrADS 中打開後,使用
```
ga-> q file 1
```
以查看內容,其中 `1` 是檔案被打開的順序。
## GrADS 腳本(.gs 檔)
### 參考內容
```GrADS
*** Setup ***
'reinit'
'set parea 1 10 1 7.5'
'set grads off'
'open filename.ctl'
'set lat -90 90'
'set lon 0 360'
'set lev 1000 300'
'set t 1 12'
*** Calculation ***
*** Plotting ***
*** The end of script and closing files ***
'close 2'; 'close 1'
```
## 繪圖
### 設定繪圖畫面
* `set parea 1 10 1 7.5`:預留好頁面邊框大小。
### 設定繪圖樣式
* `set gxout shaded`:設定繪圖類型。
| 指令 | 繪圖種類 |
| ------- |:------------------ |
| `contour` | 等值線 |
| `shaded` | 色塊等值線 |
| `vector` | 向量圖 |
| `stream` | 流線圖<br>使用 `set strmden 0` 來設定流線密度。 |
|`grfill` | 格點 |
| `line` | 線條圖(一維變數) |
* `d [var]`:繪製參數。
* 繪製向量圖
* `d u;v`
* `d skip(u,2);skip(v,2)`
* `d skip(u,2);skip(v,2);mag(u,v)`
* `set arrscl 0.3 15`:設定風標大小(長 0.3 inches,單位 15 m/s)。
* `set [line-options]`:設定線條格式。
* `set ccolor 1`:設定線條顏色。
| 代號 | 常用顏色 | 示範 |
| ---------:|:---------- | ------------------------------ |
| `0` | background | <font color="#000000">█</font> |
| `1` | foreground | <font color="#FFFFFF">█</font> |
| `2` | red | <font color="#EF0200">█</font> |
| `3` | green | <font color="#00DE00">█</font> |
| `4` | dark blue | <font color="#2732F9">█</font> |
| `13` | aqua | <font color="#06D28C">█</font> |
| `15` | grey | <font color="#7D7D7D">█</font> |
| `rainbow` | default | |
* `set cthick 1`:設定粗細。
* 設定 colourbar
* `'set cmin 0'; 'set cmax 1'; 'set cint 0.1'`:設定顏色間隔。
* `set clevs 0 0.2 0.5 0.8 1.0`:自訂顏色間隔。
* `set mproj nps`:設定投影法。
| 代號 | 常用顏色 |
| -------- |:------------------------ |
| `latlon` | 麥卡托圓柱投影(預設值) |
| `nps` | 北極投影 |
### 座標軸
* `draw`:加入標題或座標軸。
* `draw title Title`
* `draw xlab Xlabel`
* `draw ylab Ylabel`
* `set xlint 20`:設定 x(或 y)軸間隔。
* `set xlevs 0 90 180 270`:設定 x(或 y)軸刻度。
* `set vrange 0 1`:設定縱軸範圍(在 `gxout` 設爲 `line` 時)。
* `c`:清除繪圖。
* `printim`:輸出圖片。
* `printim filename.png`
* `printim filename.png x1920 y1080`:設定圖片大小。
* `printim filename.png x1920 y1080 white`:將背景設定爲白色。
### 切割子圖
```GrADS
* UL
'set vpage 0.00 5.50 4.25 8.50'
'set parea 1.00 10.00 1.00 7.50'
'set grads off'
* UR
'set vpage 5.50 11.00 4.25 8.50'
'set parea 1.00 10.00 1.00 7.50'
'set grads off'
* LL
'set vpage 0.00 5.50 0.00 4.25'
'set parea 1.00 10.00 1.00 7.50'
'set grads off'
* LR
'set vpage 5.50 11.00 0.00 4.25'
'set parea 1.00 10.00 1.00 7.50'
'set grads off'
```
#### 繪製共同大標題
```GrADS
'set vpage 0 11 0 8.5'
'set strsiz 0.25'
'set string 1 c 10 0'
'draw string 5.5 8.15 Title'
```
## 計算
### 基本運算
* `define dT = T.1(t=7)-T.2(t=1)`:可指定時間(或經度、緯度)。
### 平均
* `define B = ave(A,lat=-90,lat=90,-b)`:沿著一條線加權平均。
* `define B = aave(A,lon=0,lon=360,lat=-90,lat=90)`:在一個面積加權平均。
* `define B = ave(A,t=1,t=12,1)`:沿著時間(間隔爲 `1`)進行平均。
`define B = ave(aave(A,lon=0,lon=360,lat=-90,lat=90),t=1,t=12)`:計算整個時空的平均。
### Maskout and const
* `define T2 = maskout(T,T-1)`:將 `T-1`<0 的部分設爲 missing value。
* `define T3 = const(T2,1)`:將 `T2` 中的有效值都設爲 `1`。
* `define T3 = const(T2,0,-u)`:將 `T2` 中的無效值都設爲 `0`。
### 滑動平均
```GrADS
'set t 1+6 120-6'
'define TMv = tloop(ave(T,t-6,t+6))'
```
### 氣候值(年循環、日夜循環)
```GrADS
'set t 1 12'
'define TAc = ave(T,t+0,t=120,12)'
'modify TAc seasonal'
'define TAn = T-TAc' *計算距平值
```
### 輸出 .dat 檔
```GrADS
'set gxout fwrite'
'set fwrite filename.dat'
'd var1'
'd var2'
'disable fwrite'
```
記得經度首尾不能重疊。
## 範例
* #### 將閾值以上設爲 1、以下設爲 0。
```python
'define RH80 = maskout(RH,RH-80)'
'define RH80 = const(RH80b1,1)'
'define RH80 = const(RH80b2,0,-u)'
```
* #### 繪製灰色打點區域
```GrADS
'set gxout shaded'
'set tile 0 2 3 3 3 16'
'set rgb 20 tile 0'
'set clevs 0' *打點範圍(var>0)
'set ccols -1 20'
'd var'
```
tile=0; pattern=2(打點); minarea=3*3pix; size=3; colour=16(grey).