LKY 只有原創內容的 Blog

今之能者,謂能轉貼,至於魯蛇,皆能轉貼。不原創,何以別乎?

  1. 1. 用 Python 畫地圖的好幫手 - GeoPandas
    1. 1.1. 只要 5 個步驟,畫出自己決定各區顏色的臺中地圖!

本文需要基礎:必須要會使用 Python,若熟悉 Pandas 則可以快至一日內上手。

問題:假如你的簡報,要同時表達台中市各區的數值(例如人口數、空氣品質之類的),並強調彼此間的差異,你會怎麼做呢?

  • 是表格?
南屯區 烏日區 中區 龍井區 清水區 梧棲區
0.417 0.720 0.000 0.085 0.039 0.169

  • 還是長條圖?

  • 如果直接放一張地圖呢?是不是會更加生動?


用 Python 畫地圖的好幫手 - GeoPandas

只要 5 個步驟,畫出自己決定各區顏色的臺中地圖!

0. 下載圖資
這個函式庫沒有內建台灣圖資喔!要到這裡下載 SHP 格式的「台灣村里界圖」

1. 安裝 GeoPandas

1
pip install geopandas

2. 引入必要函式庫

1
2
3
import matplotlib.pyplot as plt
import geopandas as gp
import numpy as np

要是這一步執行出錯,可能是剛才沒安裝成功。

3. 讀取圖資

1
2
villages_shp = gp.read_file("town_shp/TOWN_MOI_1060525.shp") #全台灣村里界圖
taichung_shp = villages_shp.query('COUNTYNAME=="臺中市"') #臺中市村里界圖

前 5 筆資料看起來就像這樣

_ COUNTYCODE COUNTYID COUNTYNAME TOWNCODE TOWNENG TOWNID TOWNNAME geometry dummy number
12 66000 B 臺中市 66000070 Nantun District B07 南屯區 POLYGON ((120.6080591220001 24.12669994800007,… 0.417022
13 66000 B 臺中市 66000230 Wuri District L15 烏日區 POLYGON ((120.6080591220001 24.12669994800007,… 0.720324
244 66000 B 臺中市 66000010 Zhong District B01 中區 POLYGON ((120.6857662670001 24.14327484100005,… 0.000114
245 66000 B 臺中市 66000020 E. District B02 東區 POLYGON ((120.700333524 24.15095274500004, 120… 0.302333
246 66000 B 臺中市 66000030 S. District B04 南區 POLYGON ~((120.685349072 24.12172426600006, 120… 0.146756

4. 給臺中各區數值
為了方便快速學會這個工具,本例子先用隨機亂數產生。應用上可能會是人口密度、公司行號數目等有意義的資料。

1
2
#隨機產生臺中各區數值
taichung_shp['dummy number'] = np.random.ranf(taichung_shp.index.size)

5. 畫出地圖
GeoPandas 的 GeoDataFrame,和 Pandas 的 DataFrame 同樣內建 plot() 方法,但前者 override 成直接畫出地圖。

1
2
3
4
5
taichung_shp.plot(
cmap=plt.cm.Blues, #指定顏色
column='dummy number' #指定從自身的這個 column 讀取顏色深度
)
plt.show()

輸出:

關於作者:
@LKY 自認不夠資格叫作 Data Scientist 的資料科學工程師,最近關注救災、救護相關的 Open Data。

本文最后更新于 天前,文中所描述的信息可能已发生改变