溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python怎么用matplotlib工具包來繪制世界地圖

發布時間:2021-11-23 14:23:28 來源:億速云 閱讀:471 作者:iii 欄目:大數據
# Python怎么用matplotlib工具包來繪制世界地圖

數據可視化是數據分析的重要環節,而地圖繪制則是展示地理信息的有效方式。Python的`matplotlib`工具包結合`Basemap`或`Cartopy`擴展庫可以高效繪制世界地圖。本文將詳細介紹從環境配置到完整實現的完整流程。

## 一、環境準備

### 1.1 安裝必要庫
```bash
pip install matplotlib numpy
# Basemap安裝方式(已停止維護但仍可用)
pip install basemap
# 或使用現代替代方案Cartopy
pip install cartopy

1.2 基礎地圖繪制

import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap

plt.figure(figsize=(12, 8))
m = Basemap(projection='mill', llcrnrlat=-60, urcrnrlat=90,
            llcrnrlon=-180, urcrnrlon=180, resolution='c')
m.drawcoastlines()
m.drawcountries(linewidth=1.5)
plt.title("Basic World Map")
plt.show()

二、Basemap核心功能詳解

2.1 投影方式選擇

  • 圓柱投影(’cyl’):最簡單的經緯度投影
  • 米勒投影(’mill’):改進的圓柱投影
  • 羅賓森投影(’robin’):保持面積比例
projections = ['cyl', 'mill', 'robin']
for proj in projections:
    m = Basemap(projection=proj, lat_0=0, lon_0=0)
    m.bluemarble()  # 使用NASA藍色星球底圖
    plt.title(f"{proj} Projection")
    plt.show()

2.2 地理要素繪制

m.drawmapboundary(fill_color='aqua')
m.fillcontinents(color='coral', lake_color='aqua')
m.drawrivers(color='blue', linewidth=0.5)
m.drawparallels(range(-90, 91, 30), labels=[1,0,0,0])
m.drawmeridians(range(-180, 181, 60), labels=[0,0,0,1])

三、Cartopy現代方案(推薦)

3.1 基礎實現

import cartopy.crs as ccrs
import cartopy.feature as cfeature

fig = plt.figure(figsize=(15, 10))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())
ax.add_feature(cfeature.LAND)
ax.add_feature(cfeature.OCEAN)
ax.add_feature(cfeature.COASTLINE, linewidth=0.5)
ax.gridlines(draw_labels=True)

3.2 高級特性

# 添加自然地球數據
ax.add_feature(cfeature.BORDERS, linestyle=':')
ax.add_feature(cfeature.LAKES, alpha=0.5)
ax.add_feature(cfeature.RIVERS)

# 設置地圖范圍
ax.set_extent([-20, 60, -40, 45])

四、實戰案例:疫情數據可視化

4.1 數據準備

import pandas as pd
data = {
    'Country': ['USA', 'Brazil', 'India', 'Russia'],
    'Cases': [32800000, 14700000, 13000000, 4800000],
    'Lon': [-98.58, -47.88, 78.96, 37.61],
    'Lat': [39.82, -15.78, 20.59, 55.75]
}
df = pd.DataFrame(data)

4.2 氣泡地圖繪制

m = Basemap(projection='robin', lon_0=0, resolution='c')
x, y = m(df['Lon'].values, df['Lat'].values)
m.scatter(x, y, s=df['Cases']/100000, c='red', alpha=0.5)
m.drawcountries()
plt.title("COVID-19 Cases Bubble Map")
plt.colorbar(label='Cases (100k)')

五、常見問題解決

  1. 中文顯示問題
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
  1. 性能優化
  • 使用resolution='l'(低分辨率)加速渲染
  • 對于大量數據點,先使用m.shiftdata處理國際日期變更線
  1. 坐標轉換
# 經緯度轉地圖坐標
x, y = m(lons, lats)
# 反向轉換
lon, lat = m(x, y, inverse=True)

六、延伸學習

  1. 3D地圖繪制
from mpl_toolkits.mplot3d import Axes3D
m = Basemap(projection='ortho', lat_0=30, lon_0=-60)
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
  1. 交互式地圖: 結合mpld3庫實現網頁交互:
import mpld3
mpld3.enable_notebook()

通過本文介紹的方法,您可以輕松創建專業級的世界地圖可視化。建議在實際項目中優先使用Cartopy,因其更活躍的維護和更現代的API設計。完整代碼示例可在GitHub倉庫獲?。ㄊ纠溄樱?。 “`

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女