除了統計數據與折線趨勢,地理分布也是理解違規土地的重要視角。透過互動地圖,我們能直觀呈現各縣市年度違規土地面積的空間分布,顏色越深表示違規面積越大。
在這裡我們會利用Plotly Express來繪製台灣各縣市的地圖,將年度總違規面積以顏色深淺表示。
互動地圖的優勢在於:
import pandas as pd
import plotly.express as px
# 指定 CSV 檔案的路徑
file_path = "IT_land_violation/land_violation.csv"
# 讀取 CSV 檔案,並指定標頭為第二行 (index 1)
df = pd.read_csv(file_path, header=1)
# 重新命名縣市欄位以便後續處理
df.rename(columns={"縣市面積_公頃": "County"}, inplace=True)
# 移除最後一行的總計數據,避免影響地圖繪製
df = df[df["County"] != "總計"]
# 解決 ValueError: Invalid elements include: [nan] 的問題
# 填充 '總計面積_公頃' 欄位中的 NaN 值為 0
df["總計面積_公頃"].fillna(0, inplace=True)
# 由於 Plotly Express 尚未內建台灣各縣市的地理數據,因此這裡需要手動定義各縣市的經緯度中心點
# 這些經緯度是地圖初始中心點的近似值,以便能顯示台灣地圖
county_coords = {
"新北市": [25.01, 121.56],
"桃園市": [24.97, 121.22],
"臺中市": [24.14, 120.67],
"臺南市": [22.99, 120.20],
"高雄市": [22.62, 120.31],
"基隆市": [25.13, 121.73],
"新竹市": [24.81, 120.97],
"新竹縣": [24.84, 121.01],
"苗栗縣": [24.52, 120.81],
"彰化縣": [23.99, 120.51],
"南投縣": [23.83, 120.98],
"雲林縣": [23.70, 120.43],
"嘉義縣": [23.47, 120.45],
"屏東縣": [22.67, 120.49],
"臺東縣": [22.75, 121.15],
"宜蘭縣": [24.75, 121.75],
"花蓮縣": [23.97, 121.61],
"澎湖縣": [23.57, 119.57],
}
# 增加經度和緯度欄位
df["lat"] = df["County"].map(lambda x: county_coords.get(x, [None, None])[0])
df["lon"] = df["County"].map(lambda x: county_coords.get(x, [None, None])[1])
# 繪製地圖
fig = px.scatter_mapbox(
df,
lat="lat",
lon="lon",
color="總計面積_公頃",
size="總計面積_公頃", # 以面積大小來決定點的大小
hover_name="County",
hover_data={"總計面積_公頃": True, "lat": False, "lon": False},
color_continuous_scale=px.colors.sequential.Aggrnyl, # 顏色漸層,從黃色到紅色
size_max=50,
zoom=6.5,
center={"lat": 23.7, "lon": 121.0},
title="台灣各縣市年度違規土地面積熱力圖",
)
# 更新地圖樣式,使用開放街圖(OpenStreetMap)
fig.update_layout(mapbox_style="open-street-map")
# 顯示地圖
fig.show()
從熱力圖中可以發現,部分都市化縣市呈現明顯的黃色高峰,違規問題集中,而農村或偏遠縣市則顏色較深。這種地圖可視化不僅讓數據更直觀,也有助於快速辨識 高風險區域,方便政府或管理單位針對特定地區制定執法策略。