--- title: '使用QGIS製作面量圖' disqus: hackmd --- 使用QGIS製作面量圖 === ## 大綱 [TOC] ## 內容說明 本教學將一步一步帶領讀者使用開源GIS軟體 — QGIS,製作面量圖。面量圖是主題地圖的一種,其製作方法是根據統計數值的多寡來將不同的地理區域上色,如此可有效呈現地理區域間目標數值的分布情形,常使用於資料視覺化的各種應用場合,例如:縣市長全國選舉時用以呈現各縣市的勝選政黨。本教學包括下列各點: 1. 使用QGIS開啟shapefile檔。 2. 插入以逗號分隔檔(.csv)存在的統計資料。 3. 進行「資料表連接(table join)」,將圖徵與統計資料連結起來。 4. 調整面量圖參數。 5. 出圖設定。 ## 教學 ### 安裝QGIS 3.X版 製作此指南時,我安裝的QGIS版本號為3.4,理論上3.X版本都可以適用此指南。請自[QGIS官網](https://qgis.org/en/site/)下載軟體,並依照指示安裝。 ![](https://i.imgur.com/K7RrAN9.png) ▲ 安裝好後,預設在「開始」選單中會出現這些捷徑。 點選「QGIS Desktop 3.4.3」,開啟QGIS主程式。 ![](https://i.imgur.com/mPgB6sy.png) ▲ 載入主程式的畫面。 QGIS以專案(project)來管理每一次的地理分析作業,可以想像成每一次開啟新的專案,就等同開始一份新的專題研究。 ![](https://i.imgur.com/MySPSEI.png) ▲ 初始介面如上,中間會顯示曾經開啟過的專案。 ### 插入向量圖層 ![](https://i.imgur.com/gjo1D5s.png) ▲ 點選「Project/New」,開啟新專案。 ![](https://i.imgur.com/Z62pFMw.png) ▲ 這是新專案的介面。 ![](https://i.imgur.com/xki30p5.png) ▲ 點選「Layer/Add Layeer/Add Vector Layer」,載入Shapefile。 ![](https://i.imgur.com/ljrFvM3.png) ▲ 依序設定欲載入的Shapefile: 1. 選擇「File」。 2. 選擇編碼格式,一般會是「UTF-8」,但若是台灣產出的Shapefile檔,可能會使用「Big-5」。 3. 選擇檔案位置。我會建議將所有專案會用到的圖資都放在同一個資料夾內以便搜尋,除非檔案很大,不方便移動。 4. 點選「Add」,加入圖層。 ![](https://i.imgur.com/VqVNE0m.png) ▲ 順利載入Shapefile檔。 ![](https://i.imgur.com/Y1aRgDq.png) ▲ 在左下角的「Layer」選單中,左鍵點選剛才加入的圖層,然後點右鍵,在選單中點選「Open Attribute Table」,開啟屬性資料表。 ![](https://i.imgur.com/zto1HPC.png) ▲ 順利開啟屬性資料表。 ![](https://i.imgur.com/kZ09sDw.png) ▲ 上方會顯示該Shapefile檔的欄位名稱。 ### 修改特定欄位 ![](https://i.imgur.com/xWPIQ4g.png) ▲ 點選屬性資料表上方,左邊第一個按鈕「Toggle editing mode」,開啟編輯模式。 ![](https://i.imgur.com/RJ1FMDn.png) ▲ 左鍵雙擊特定欄位,可以修改該欄位內容。 ![](https://i.imgur.com/lsnAS4M.png) ▲ 修改後,再次點選「Toggle editing mode」,QGIS會詢問是否要儲存剛才的變更。**注意**此步驟會直接修改Shapefile檔的內容,建議每次進行新專案時先行備份新的Shapefile檔,利用新建立的檔案進行GIS分析。 ### 插入逗號分隔檔圖層 ![](https://i.imgur.com/i0H3S4j.png) ▲ 透過文本編輯器,我們可以先行確認.csv檔中欄位的名稱及其對應的資料。在範例中,第二欄(Third_Name)為我們要用來連結兩資料表的主鍵(Key)。 ![](https://i.imgur.com/1cAUvgt.png) ▲ 點選加入逗號分隔檔的圖層。 ![](https://i.imgur.com/GHqvLNh.png) ▲ 依照數字順序依序選擇檔案: 1. 選擇要插入的.csv檔。 2. 選擇編碼,一般而言是UTF-8(有時是Big5,可以從下方的預覽功能中看到文字有無正常顯示。) 3. 選擇.csv格式 4. 勾選「此檔無地理資訊」。 5. 點選「Add」加入圖層,然後點選「Close」關閉視窗。 ![](https://i.imgur.com/heWfidu.png) ▲ 完成後可以看到資料表格已經順利讀入QGIS。 ### 資料表連結 ![](https://i.imgur.com/NTfQvka.png) ▲ 點選「Processing/Toolbox」。 ![](https://i.imgur.com/Ko5qDiM.png) ▲ 點選設定。 ![](https://i.imgur.com/m1lFXLc.png) ▲ 勾選「Processing/General/Use filename as layer name」,以方便之後步驟進行。勾完後點選下方的「OK」。 ![](https://i.imgur.com/kfqJbIe.png) ▲ 在Processing Toolbox中開啟「join」功能。 1. 搜尋「join」。 2. 找到「Vector general/Join attribute by field value」,雙擊左鍵打開。 ![](https://i.imgur.com/PPKtCTa.png) ▲ 設定資料表連結的選項。 1. 選擇具地理資訊的圖層(即A檔)。 2. 選擇該圖層中的主鍵欄位。 3. 選擇具統計資料的.csv檔(即B檔)。 4. 選擇該圖層中的主鍵欄位。 ![](https://i.imgur.com/vqURkEX.png) ▲ 設定連結好的資料表的存檔格式,請點選「Save to GeoPackage...」。接著依照彈出的視窗設定檔名及圖層名,並按下「Run」。 ![](https://i.imgur.com/9YBtFF7.png) ▲ 確認資料表是否有正常連結。 1. 確認配對成功的圖徵(feature)數,在本次範例中,台灣共有368個鄉鎮,但是.csv資料檔只有107列。QGIS顯示有105列配對成功,263列未成功(以紅字顯示),表示在資料配對的過程中有些微錯誤,導致結果不符合預期,此時應重新省視.csv檔以確認是否有重複或是與Shapefile檔的主鍵不相符之處。本指南先假設無問題,繼續下方說明。 2. 點選「Close」關閉視窗。 3. 可以看到連結好的圖層「joined」已經被加入QGIS專案中。 ![](https://i.imgur.com/ZRiGbyG.png) ▲ 點選「joined」圖層的屬性資料表,可以看到.csv檔中的資料已經配對到相對應的列中。空白處則表示該欄位為配對而呈現缺失值(Missing data, NULL)。 ### 缺失值處理 使用QGIS製作面量圖時,如果屬性資料表中有缺失值,則步驟會較為繁瑣。我們先手動修改「joined」圖層的屬性資料表,將所有的缺失值欄位改成「-999(-999是資料科學上常用於表示缺失值的一個數字)」,以便後續作業。 ![](https://i.imgur.com/R76W7xx.png) ▲ 點開「joined」圖層的屬性資料表,在上方工具列中找到、點選「Select/filter features using form」。 ![](https://i.imgur.com/zYgAM0c.png) ▲ 設定選取規則。 1. 找到目標欄位「Plant_Area」,在右方「Exclude field」中找到、點選「is missing (NULL)」。 2. 點選「Select features」。 ![](https://i.imgur.com/bTABIu0.png) ▲ 完成後可以發現所有「Plant_Area」為缺失值的圖徵都已經被選取。 ![](https://i.imgur.com/xWPIQ4g.png) ▲ 開啟編輯模式。 ![](https://i.imgur.com/wGDLiBz.png) ▲ 設定修改數值。 1. 選擇「Plant_Area」欄位。 2. 輸入「-999」。 3. 點選「Update Selected」。 4. 再次點選「Toggle editing mode」,儲存變更並關閉編輯模式, ![](https://i.imgur.com/VwWubvO.png) ▲ 點選「Deselect all」。 ![](https://i.imgur.com/S6fPkfz.png) ▲ 點選「Switch to table view」。 ![](https://i.imgur.com/JD5vAPA.png) ▲ 可以看到所有的缺失值欄位已經被取代成「-999」。 ### 調整面量圖參數 接下來進入作圖設定,已經可以把「Processing Toolbox」關閉了。 ![](https://i.imgur.com/RJ07D1T.png) ▲ 選擇「joined」圖層,並點選左上方的「Open the Layer Styling panel」。 ![](https://i.imgur.com/IlThZUZ.png) ▲ 將這個選項改成「Graduated」。 ![](https://i.imgur.com/CXPyxkh.png) ▲ 依序設定參數。 1. 選擇資料來源欄位。 2. 選擇使用的顏色色階。 3. 點選「+」加入分級單位。 ![](https://i.imgur.com/SgooGCd.png) ▲ 依序設定參數。 1. 調整小數位數至「Precision -2」。 2. 雙擊每個級距單位的「Values」與「Legends」,更改為需要的數值。我這邊將第一個級距單位設為「-999-0」,如此便會顯示出缺失值欄位。 3. 點選「Apply」進行分級著色。 ![](https://i.imgur.com/tVA7bqo.png) ▲ 完成後已可見面量圖之雛形,但我們還可以加以美化。 ![](https://i.imgur.com/rkE2tFw.png) ▲ 選擇所有級距單元後,按下上方的「Symbol/Change...」。 ![](https://i.imgur.com/TPpZPg7.png) ▲ 依許點選「Fill/Simple fill」,並點選下方的「Sroke color」右邊的下拉選單,勾選「Transparent stroke」,並按下「Apply」。除此之外,這個繪圖面板還有很多細部設定可以調整,可以自行嘗試。 ![](https://i.imgur.com/VhXv8i4.png) ▲ 完成面量圖設定,剩下出圖面板的設定了。 ### 合併圖徵 此指南使用的Shapefile檔的最小級別是「鄉鎮市」,我們可以透過合併圖徵來獲得「縣市」級別的圖徵。 ![](https://i.imgur.com/2S1xxok.png) ▲ 點選「Vector/Geoprocessing Tools/Dissolve...」。 ![](https://i.imgur.com/NruSOec.png) ▲ 依序設定參數: 1. 選擇欲合併的圖層。 2. 選擇欲用以合併的欄位(主鍵),QGIS將會依此欄位將較次級的圖徵合併。 3. 設定是否要另存成新的獨立圖資檔案,或是僅使用暫存圖層,建議儲存成獨立檔案以便下一次載入專案檔時使用。 4. 點選「Run」。 ![](https://i.imgur.com/FiHpglH.png) ▲ 此為上述第2步驟的畫面,可以選擇單一用以合併的目標欄位。 ![](https://i.imgur.com/heYbtN9.png) ▲ QGIS程式合併中。 ![](https://i.imgur.com/AqYbjDv.png) ▲ 完成圖徵合併,後續可以依照上面的說明調整視覺化設定,以另地圖美觀,例如:調整縣市級的邊框粗細。 ### 出圖面板設定 最後一步是設定出圖面板(Print Layout),出圖面板式儲存於專案檔(.qgz)中的,理論上下一次開啟同一個專案檔也可以載入相同的出圖設定,而不用重複調整。 ![](https://i.imgur.com/xlySuq6.png) ▲ 點選「Project/New Print Layout」,開啟出圖面板。 ![](https://i.imgur.com/HjB7XAU.png) ▲ 出圖面板為一個獨立彈出的視窗。點選「Add Item/Add Map」。 ![](https://i.imgur.com/TZt4nV6.png) ▲ 透過游標拉出要插入地圖的範圍。 ![](https://i.imgur.com/a8PZGh8.png) ▲ 放開游標後,已插入地圖。 ![](https://i.imgur.com/lyQxCEM.png) ▲ 同上,點選「Add Item/Add Scale Bar」,插入比例尺。 ![](https://i.imgur.com/n7coTIe.png) ▲ 同上,點選「Add Item/Add Legend」,插入圖例。 ![](https://i.imgur.com/dnCrRkE.png) ▲ 同上,點選「Add Item/Add Picture」,插入方向標。 ![](https://i.imgur.com/gY6geBP.png) ▲ 方向標的選項很多種,位於右方「Item Properties/Search Directories」中,可以自行挑選。 ![](https://i.imgur.com/nJLnM27.png) ▲ 插入的地圖範圍是根據原本QGIS操作頁面的可視範圍決定的,現在在QGIS專案頁面中縮放(Zoom)到目標位置(金門)。 ![](https://i.imgur.com/XMjCQqt.png) ▲ 回到出圖面板,再次插入地圖,可以發現金門的範圍已被加入出圖面板中,代號為「Map 2」。 ![](https://i.imgur.com/v1DZuaK.png) ▲ 點選「Add Item/Add Label」,插入文字標籤,我們在這邊插入金門與馬祖的標示,以便閱讀者判斷。 ![](https://i.imgur.com/iPTnAJH.png) ▲ 點選「Layout/Export as Image」,挑選欲匯出的圖片格式後,即可匯出完成的地圖。QGIS也提供了SVG檔與PDF檔可供匯出。 ![](https://i.imgur.com/ccWKJrD.png) ▲ 完成! ### 補充-AgriMap_TW輸出的Shapefile AgriMap_TW專案所輸出的Shapefile檔也可以透過這個流程開啟,因為在專案中已經做過資料表連結的動作,所以直接從「**缺失值處理**」這一步開始即可,以下簡單說明載入流程。 ![](https://i.imgur.com/Xnw7Ui1.png) ▲ 依據上面的流程,指定載入AgriMap_TW所輸出的.shp檔(單一個Shapefile檔由五個子檔案所構成,只須點選副檔名為「.shp」的檔案,電腦會自動載入同一資料夾內的其他子檔案。) ![](https://i.imgur.com/u7SKYTa.png) ▲ 順利載入Shapefile檔。 ![](https://i.imgur.com/tSCLl18.png) ▲ 透過圖層選單開啟資料屬性表(Open Attribute Table)。 ![](https://i.imgur.com/7l0RIWp.png) ▲ 資料屬性表的視窗。 ![](https://i.imgur.com/rFppaSm.png) ▲ 上方第一列可見資料屬性表的表頭。注意2號方框,AgriMap_TW產出的Shapefile檔並未將缺失值補齊,可以利用上述教學補齊缺失值欄位後,再進行出圖設定。 ## 延伸閱讀 1. [QGIS官方指南](https://www.qgistutorials.com/zh_TW/docs/3/performing_table_joins.html) 我是參考這個指南來製作本教學的,基本上內容一致。 ## 變更日誌 * 2020/07/19-18:08 完成第1.0版說明。 * 2020/07/19-18:46 完成第1.1版說明。 :::info **Find this document incomplete?** Leave a comment! ::: ###### tags: `GIS` `Documentation`