GMT5 Tutorial

GMT5 教程 | 編者: Po-Chin Tseng

XY散佈圖(其他投影法)


目錄

  1. 總覽
  2. GMT介紹及安裝
  3. 網路資源及配套軟體
  4. 第零章: 基本概念及默認值
  5. 第一章: 製作地圖(地理投影法)
  6. 第二章: XY散佈圖(其他投影法)
  7. 第三章: 等高線圖及剖面
  8. 第四章: 地形圖與色階
  9. 第五章: 地震活動性與機制解
  10. 第六章: 向量與速度場
  11. 第七章: 台灣地理資訊
  12. 第八章: 直方、圓餅、三元圖
  13. 第九章: 三維空間視圖
  14. 第十章: 地質圖

6. XY散佈圖

除了將資料展示在地圖上,另一個數據分析很重要的圖表格式就是XY散佈圖,本章將分成4個小節介紹如何將資料呈現在線性、對數、時間軸上, 以及極座標上。

6.1 目的

本章將學習如何繪製

  1. 線性軸(Linear)
  2. 指數、對數軸(Power, Logarithmic)
  3. 時間序列(Time)
  4. 極軸(Polar)

6.2 學習的指令與概念

6.3 線性軸(-Jx -JX)

當我們想知道兩個變數之間的關係,常會用到XY散佈圖來表示,看兩者之間是正相關還是負相關。 此節利用死因統計,想知道意外事故死亡人數,在各年齡層之間的變化, 以及與性別的關係,首先先來看成果圖及批次檔。

使用的資料檔:

成果圖

批次檔

set ps=6_3_accidentalDeath.ps

# 製作底圖框架
gmt psbasemap -R0/100/0/450 -JX20/15 -Bxa5+l"Age" -Bya50+l"Deaths (count)" ^
-BWeSn+t"2016 Taiwan Accidental Deaths" -K > %ps%

# 繪製垂直虛線
echo 15 0 > area
echo 15 450 >> area
gmt psxy area -R -JX -W1.5,180/180/255,- -K -O >> %ps%
echo 75 0 > area
echo 75 450 >> area
gmt psxy area -R -JX -W1.5,255/180/180,- -K -O >> %ps%

# 繪製死亡人數資料點
awk "$3==1 {print $1, $2}" dead105.dat | gmt psxy -R -JX -Sd.4 ^
-G30/34/170 -W1 -K -O >> %ps%
awk "$3==2 {print $1, $2}" dead105.dat | gmt psxy -R -JX -Sc.4 ^
-G208/0/111 -W1 -K -O >> %ps%

# 圖例框與圖例說明
echo 1 385 > area
echo 15.5 385 >> area
echo 15.5 445 >> area
echo 1 445 >> area
gmt psxy area -R -JX -W1 -G255 -L -K -O >> %ps%
echo 3 430 | gmt psxy -R -JX -Sd.4 -G30/34/170 -W1 -K -O >> %ps%
echo 6 430 Male | gmt pstext -R -JX -F+f14+jML -K -O >> %ps%
echo 3 400 | gmt psxy -R -JX -Sc.4 -G208/0/111 -W1 -K -O >> %ps%
echo 6 400 Female | gmt pstext -R -JX -F+f14+jML -O >> %ps%

# 轉成.png檔,刪除暫存資料
gmt psconvert %ps% -Tg -A -P
del area

本節學習到的新指令:

寬度單字對照表

Word Width Word Width
faint 0 thicker 1.5p
default 0.25p thickest 2p
thinnest 0.25p fat 3p
thinner 0.50p fatter 6p
thin 0.75p fattest 12p
thick 1.0p obese 18p

線樣式表

Style  
- dash
. dot
-. dash-dot
..- dot-dot-dash
可自行搭配  

從2016台灣意外死亡人數的xy散佈圖來看,在15~20區間之後(藍色虛線之後),男性意外死亡人數急遽增加,相對地, 女性並沒有大幅度地增加,另一方面在75~80區間之後(粉紅色虛線之後),意外死亡的人數開始下滑, 從上述兩點,推測可能的原因是…(省略)。

上一段的文字,示範如何利用資料作圖,並嘗試觀察出現象,來解釋其成因。當然,單單從一年份的意外死亡人數來推斷成因, 是不夠週全的,還需要像是其他年份的死亡資料、男女比例、其他死因等等的證據,才能寫出一份全面地論述。

6.4 指數、對數軸

每當地震來時,大家都會提到這次地震的規模多少,規模2或3你就會聯想到這次地震不大(可以去PTT發地震文), 規模6或7你就會反應這次地震很大,查一下各地區的震度(記住保命優先)!而你想過,地震規模到底是怎麼得到的嗎?

1935年發生了南加州地震,Charles Richter教授為了量化地震本身的大小,提出了芮氏地震規模ML(Richter magnitude), 或稱作近震規模(Local magnitude)。他以南加州地震為例,提出的公式ML=logA+2.76logD-2.48, 其中A代表地震儀紀錄最大振幅(微米);D代表震央距(度);2.762.48是區域修正常數。 還有其他像是Mb體波規模、Ms表面波規模、 Mw地震矩規模,來估算地震大小。讓我們來假設震央距為10度,不同大小的振幅所對應的芮氏規模吧!

使用的資料檔:

成果圖

批次檔

set ps=6_4_richter_magnitude.ps

# 製作左側圖
gmt psbasemap -R0/9.99/1e0/9.99e9 -JX9/15l -BWeSn -Bxa1+l"Richter Mag." ^
-Bya1pf3+l"Maximum Amp. (Microns)" -K > %ps%
gmt psxy richter_magnitude.dat -R -JX -W1 -K -O >> %ps%
echo 7.3 7.3e6 1999 Chi-Chi > tmp
echo 6.6 6.6e5 2016 Meinong >> tmp
gmt psxy tmp -R -JX -Sc.6 -G0 -K -O >> %ps%
gmt pstext tmp -R -JX -F+f14p+jMR -D-.6/0 -K -O >> %ps%

# 製作右側圖
gmt psbasemap -R0/9.99/1e-2/9.99 -JX9/15p2 -BWeSn -Bxa1+l"Magnitude" ^
-Bya1f.2g1+l"Log of Maximum Amp. (Microns)" -X12 -K -O >> %ps%
gmt psxy richter_magnitude_log.dat -R -JX -W1 -K -O >> %ps%
for /l %%x in (1, 1, 9) do (
awk "$2==%%x {print $1, $2}" richter_magnitude_log.dat | ^
gmt psxy -R -JX -Sc.5 -G255 -K -O >> %ps%)
for /l %%x in (1, 1, 9) do (
awk "$2==%%x {print $1, $2, %%x}" richter_magnitude_log.dat | ^
gmt pstext -R -JX -F+f14p -K -O >> %ps%)
echo 2.7 1.7 NOT FELT > tmp
echo 4.2 3.4 MINOR >> tmp
echo 5.2 4.5 SMALL >> tmp
echo 6 5.5 MODERATE >> tmp
echo 7 6.5 STRONG >> tmp
echo 8 7.5 MAJOR >> tmp
echo 8.2 8.5 GREAT >> tmp
gmt pstext tmp -R -JX -F+f12p+jML -K -O >> %ps%
echo 7.7 9.2 RICHTER SCALE | gmt pstext -R -JX -F+f22p,1+jMR -K -O >> %ps%
echo 7.5 8.9 A | gmt pstext -R -JX -F+f18p,2+jMR -K -O >> %ps%
echo 7.4 8.7 GRAPHIC | gmt pstext -R -JX -F+f18p,2+jMR -K -O >> %ps%
echo 7.3 8.5 REPRESENTATION | gmt pstext -R -JX -F+f18p,2+jMR -K -O >> %ps%

gmt psxy -R -JX -T -O >> %ps%
gmt psconvert %ps% -Tg -A -P
del tmp

成果圖右側參考Ansfield_19921。本節學習的新指令:

在芮氏規模的公式中,振福與規模存在一個10次方倍的關係,如果用線性軸來表示,會因為x,y軸量值差距過大, 而無法正常表示,所以左側的圖,將y軸設定為以10次方倍為一個區間,才能將這關係轉換至線性,便於表現在圖上。 右側的圖,為了示意振幅及規模兩者之間非線性關係,先將振幅資料取log,再透過指數軸來示意兩者非線性之間的關係。

6.5 時間序列

時間序列這類型的圖,主要用來表示資料與時間之間的關係,普偏地出現在平常的生活當中,股票及匯率的走勢、 國內生產毛額(GDP)、公司各季的財務報表等等,都被稱作時間序列。本節將利用大氣水文資料庫, 中央氣象局自動測站C0V250(甲仙)在莫拉克颱風期間的雨量資料,來學習如何繪製時間序列圖。

使用的資料檔:

成果圖

批次檔

set ps=6_5_C0V250_morakot.ps

# 設定圖框、刻度、標題等等
gmt gmtset ^
FORMAT_DATE_MAP = yyyy/mm/dd ^
MAP_FRAME_PEN = 3p ^
MAP_TICK_PEN_PRIMARY = 3p ^
FONT_ANNOT_PRIMARY = 16p,4,black ^
FONT_LABEL = 20p,4,black ^
FONT_TITLE = 26p,4,black

# 繪製雨量長條圖
gmt psbasemap -R2009-08-06T/2009-08-15T/0/150 -JX20/12 ^
-BW+t"Station: C0V250"+g225 -Bxa2D -Bya30+l"Rainfall (mm)" -K > %ps%
awk "{print $1,$2}" C0V250_rain.dat | gmt psxy -R -JX -Sb.1 -G0/14/203 -K -O >> %ps%

# 繪製累積雨量折線圖
awk "{print $1,$3}" C0V250_rain.dat | gmt psxy -R2009-08-06T/2009-08-15T/0/2200 ^
-JX -W3.5,242/51/51 -K -O >> %ps%
gmt psbasemap -R -JX -BESn -Bxa2D+l"Time (Year/Mon/Day)" ^
-Bya400f200+l"Accumulated Rainfall (mm)" -K -O >> %ps%

gmt psxy -R -JX -T -O >> %ps%
gmt psconvert %ps% -Tg -A -P
del gmt.conf

本節學習的新指令:

為了表達在同一段時間內,不同資料的變化趨勢,雙軸圖(twin axis figure)被廣泛地應用在時間序列中, 透過簡單的-B參數設定來達到此效果。從圖中可以看到甲仙地區,在2009/08/06晚上開始下雨(藍色長條), 約以每小時20~40mm的降水量持續到8號下午,8號晚間帶來80~100mm/hr的雨量,在此之後開始緩慢下降, 從6號到15號,莫拉克颱風共帶來約2200mm的總降雨量(紅線)。透過此圖,將這災難性的颱風所帶來的雨量紀錄, 清楚地顯示雨量集中的時間段,以及短時間內的雨量總量。

6.6 極軸

極座標軸是由角度和相對原點距離來組成,常應用在數學、物理、工程等等領域,像是岩層走向、航海雷達等。 本節將利用大氣水文資料庫中台北、台中、台南、台東,共四個氣象站的風速及方向資料, 來展示台灣夏季及冬季的風向與風速的差異,並示範pslegend的用法。

使用的資料檔:

成果圖

批次檔

set ps=6_6_season_wind.ps

gmt psbasemap -R0/360/0/5 -JPa17 -BN+g230 -Bxa20 -Byg1 -K > %ps%
# 466920, Taipei
awk "$4==466920 {print $3, $2}" summer_wind.dat | gmt psxy -R -JP -Sc.3 -G161/216/132 -K -O >> %ps%
awk "$4==466920 {print $3, $2}" winter_wind.dat | gmt psxy -R -JP -Sc.3 -G42/99/246 -K -O >> %ps%
# 467490, Taichung
awk "$4==467490 {print $3, $2}" summer_wind.dat | gmt psxy -R -JP -Ss.3 -G161/216/132 -K -O >> %ps%
awk "$4==467490 {print $3, $2}" winter_wind.dat | gmt psxy -R -JP -Ss.3 -G42/99/246 -K -O >> %ps%
# 467410, Tainan
awk "$4==467410 {print $3, $2}" summer_wind.dat | gmt psxy -R -JP -St.3 -G161/216/132 -K -O >> %ps%
awk "$4==467410 {print $3, $2}" winter_wind.dat | gmt psxy -R -JP -St.3 -G42/99/246 -K -O >> %ps%
# 467660, Taitung
awk "$4==467660 {print $3, $2}" summer_wind.dat | gmt psxy -R -JP -Sn.3 -G161/216/132 -K -O >> %ps%
awk "$4==467660 {print $3, $2}" winter_wind.dat | gmt psxy -R -JP -Sn.3 -G42/99/246 -K -O >> %ps%
# wind speed label
echo -90 1 1 m/s > tmp
echo -90 2 2 m/s >> tmp
echo -90 3 3 m/s >> tmp
echo -90 4 4 m/s >> tmp
gmt pstext tmp -R -JP -F+f14p -G230 -K -O >> %ps%

# legend set
echo H 24 Times-Roman Legend > tmp
echo D 0.4 1p >> tmp
echo G .2 >> tmp
echo N 2 >> tmp
echo S .5 c .5 0 0 1 Taipei >> tmp
echo S .5 s .5 0 0 1 Taichung >> tmp
echo G .1 >> tmp
echo S .5 t .5 0 0 1 Tainan >> tmp
echo S .5 n .5 0 0 1 Taitung >> tmp
echo D 0.8 1p,0,- >> tmp
echo P >> tmp
echo G .1 >> tmp
echo T Each symbols indicate the different city. >> tmp
echo T The green data are in the summer (Jun., Jul., Aug.), >> tmp
echo T and the blue points are in the winter (Dec., Jan., Feb.). >> tmp
gmt pslegend tmp -R -JP -C.1/.1 -Dx18.5/5+w8 -F+g240+p1+s4p/-4p/gray50 ^
--FONT_ANNOT_PRIMARY=16p -K -O >> %ps%

gmt psxy -R -JX -T -O >> %ps%
gmt psconvert %ps% -Tg -A -P
del tmp

本節學習的新指令:

台灣為在副熱帶季風區,在夏季的時後吹西南風;冬季則是吹東北風,從這四個站的資料顯示,大致符合這個現象, 夏季風向約從140至240度,而冬季從320度至80度(順時鐘數),另一方面,冬季季風的風速大於夏季季風。

圖例是一張圖中重要的元素之一,要能清楚地表達各符號、顏色等等分別代表什麼意思,GMT提供了方便的指令, 來製作結果圖,但如何構圖、配色,來凸顯資料的特徵,則需要大量的經驗,這又是另一門學問了。

6.7 習題

本次習題將使用政府資料開放平台中的高鐵運量統計表, 來看自2007年1月5號高鐵開始通車,到2017年8月底為止,官方統計的車次數量及乘客量在時間上的變化, 以及這兩個變數之間有什麼關係。

使用的資料檔:

6.8 參考批次檔

列出本章節使用的批次檔,供讀者參考使用,檔案路經可能會有些許不同,再自行修改。


上一章下一章


註腳

  1. A Graphic Representation of the Richter Scale (V.J. Ansfield, 1992)