【初心者向け】たった10行のPythonコードでカッコいい地図を作る!Cartopy入門ガイド

Pythonで地理データの可視化をしたいと思ったことはありませんか?
実は、Cartopyというライブラリを使えば、誰でも簡単に美しい地図を作ることができるんです。
本記事では、Cartopyの基本的な使い方から実践的な応用例まで、丁寧に解説していきます。
コードを書きながら、地図の描画方法を楽しく学んでいきましょう!

この記事を読んだらわかること
  • Cartopyのインストール方法と基本的な使い方
  • 地図のカスタマイズ方法(プロジェクション、色、スタイルなど)
  • 点、線、ポリゴン、等高線の描画方法
  • タイルマップの追加方法
  • 実データを使った地図の可視化事例
  • 効率的な地図描画のためのTips 他の地理情報ライブラリとの連携方法

はじめに

Pythonで地理空間データを可視化したいと思ったことはありませんか?
美しい地図を手軽に作れたら、データの分析や表現の幅が広がるはずです。
そんなときに活躍するのが、Pythonの地図描画ライブラリ「Cartopy」です。

Cartopyは、シンプルなコードで多彩な地図を描画できるツールです。
豊富な地図プロジェクションに対応しているため、あらゆる地域や目的に合わせた柔軟な表現が可能。
しかも、Matplotlibをベースにしているので、グラフやプロットと組み合わせるのも簡単です。

実際のコードを見てみましょう。
わずか数行で、世界地図を描画できます。

import cartopy.crs as ccrs
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())

ax.coastlines()
ax.set_global()
ax.gridlines()

plt.show()

この記事では、Cartopyの基本的な使い方から、実践的な地図作成テクニックまでを丁寧に解説します。
コードサンプルを数多く交えながら、ステップバイステップで地図可視化スキルを身につけていきましょう。
Cartopyならではの表現力とPythonの柔軟性を組み合わせれば、あなたのデータがより説得力のある洞察を生み出すはずです。

では、さっそくCartopyの世界に飛び込んでみましょう!

Cartopyとは何か

Cartopyは、Pythonエコシステムの一部として開発された地図描画ライブラリです。
地理空間データの可視化に特化しており、緯度経度情報を持つデータを地図上にプロットするための機能を豊富に備えています。
直感的でシンプルなAPIを提供しているため、Pythonの基礎知識さえあれば、誰でも簡単に地図を作成できるのが大きな特徴です。

Cartopyを使うメリット

Cartopyを使うメリットは、何といっても美しい地図を手軽に作れることです。
高品質な地図描画機能を備えているため、少ないコード量で見栄えの良い地図を生成できます。
また、MatplotlibのPyplotインターフェースと緊密に連携しているため、グラフやプロットとの組み合わせも容易。
地図上にデータの可視化結果を重ねて描画するなど、複合的な表現も可能です。

さらに、Cartopyは180種類以上の地図プロジェクションをサポートしています。
これにより、あらゆる地域や用途に適した地図表現を柔軟に選択できます。
加えて、シェープファイルや地理院タイルなどの地理空間データも扱えるため、多様なデータソースを地図と統合することができます。

記事の目的とゴール

本記事は、Pythonを使ったデータ可視化に関心を持つ読者に向けて、Cartopyの使い方を初歩から丁寧に解説することを目的としています。
Pythonの基本的な知識は前提としつつ、実行可能なコードサンプルを数多く示しながら、実践的な地図作成スキルを身につけていただくことをゴールとしています。

記事の前半では、Cartopyのインストール方法や基本的な地図の描画方法について解説します。
中盤からは、プロジェクションの変更や、点や線、ポリゴンのプロットなど、より実践的な内容に踏み込んでいきます。
後半では、現実のデータを使った地図作成例や、パフォーマンス改善のヒントなども紹介する予定です。

読者の方には、この記事を通してCartopyの特徴と可能性を存分に理解していただき、
実際の業務や研究の場面で、自信を持って地図可視化に取り組んでいただければ幸いです。
それでは、早速Cartopyの基礎から学んでいきましょう。

Cartopyのインストール方法

Cartopyを使って地図を描画するには、まず環境にCartopyをインストールする必要があります。
ここでは、Cartopyのインストール方法を詳しく解説していきます。

環境構築の前提条件

Cartopyを問題なくインストールするには、以下の前提条件を満たしている必要があります。

  • Python 3.5以降がインストールされていること
  • pipまたはcondaを使ってパッケージをインストールできること
  • NumPy、Shapely、GEOSなど、Cartopyが依存しているパッケージがインストールされること

特に、地理空間ライブラリであるGEOSやProj、Shapely、FIONAは、Cartopyの重要な依存ライブラリです。
これらのライブラリがシステムにインストールされていない場合、Cartopyのインストールに失敗することがあります。

pipを使ったインストール手順

pipを使ってCartopyをインストールするには、以下のコマンドを実行します。

pip install cartopy

このコマンドにより、Cartopyとその依存パッケージが自動的にインストールされます。
特定のバージョンのCartopyをインストールしたい場合は、以下のようにバージョン番号を指定します。

pip install cartopy==0.18.0

インストールが完了したら、以下のコードを実行して地図が描画されるか確認しましょう。

import cartopy.crs as ccrs
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())
ax.coastlines()
plt.show()

エラーなく地図が表示されれば、インストールは成功です。

condaを使ったインストール手順

condaを使ってCartopyをインストールする場合は、以下のコマンドを実行します。

conda install -c conda-forge cartopy

ここでは、conda-forgeチャンネルからCartopyをインストールしています。
conda-forgeは信頼性の高いパッケージを提供しているため、こちらを使用することを推奨します。

condaの場合も、依存パッケージは自動的にインストールされます。
インストール後は、先述のコードを実行して地図の描画を確認してください。

詳細なトラブルシューティング

Cartopyのインストール時には、依存ライブラリに関連するエラーが発生することがあります。
例えば、GEOSやProjのインストールが不完全な場合、以下のようなエラーが表示されます。

OSError: Could not find lib geos_c or load any of its variants ['libgeos_c.so.1', 'libgeos_c.so'].

このような場合は、エラーメッセージを手がかりに、足りないライブラリを個別にインストールする必要があります。
Windowsユーザーの場合は、Unofficial Windows Binaries for Python Extension Packagesを使うと、
必要なライブラリを一括でインストールできるので便利です。

Cartopyのインストールには多少の試行錯誤が必要になることもありますが、
上記の手順とトラブルシューティングを参考に、ぜひ環境構築にチャレンジしてみてください。
インストールさえ完了すれば、あとは地図を描くだけです!

Cartopyで地図を描画するための基本

Cartopyを使った地図描画の基本的な流れを見ていきましょう。
まずは必要なモジュールをインポートするところから始めます。

必要なモジュールのインポート

Cartopyで地図を描画するには、cartopy.crsmatplotlib.pyplotの2つのモジュールが必要です。
それぞれ、以下のようにエイリアスを付けてインポートするのが一般的です。

import cartopy.crs as ccrs
import matplotlib.pyplot as plt

cartopy.crsは、地図のプロジェクションを扱うためのモジュールです。
一方、matplotlib.pyplotは、グラフ描画ライブラリMatplotlibのPyplotインターフェースを提供するモジュールです。
Cartopyは、Matplotlibをベースにして地図描画機能を追加しているため、pltモジュールは必須となります。

初めての地図描画コード

それでは、早速Cartopyを使って世界地図を描画してみましょう。
以下のコードを実行してください。

fig = plt.figure(figsize=(10, 5))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())

ax.coastlines()
ax.stock_img()

plt.show()

コードの各行の意味は次の通りです。

  1. plt.figure()で、地図を描画するための図(Figure)を作成します。figsizeで図のサイズを指定できます。
  2. fig.add_subplot()で、図の中に地図用の軸(Axes)を追加します。projectionパラメータで、地図のプロジェクションを指定します。ここでは、PlateCarree(正距円筒図法)を使用しています。
  3. ax.coastlines()で、地図に海岸線を描画します。
  4. ax.stock_img()で、地図の背景に衛星画像を描画します。
  5. plt.show()で、描画した地図を表示します。

実行すると、世界地図が描画されるはずです。

描画結果の解説

上のコードでは、以下のような世界地図が描画されます。

海岸線と衛星画像が描画された、シンプルな世界地図ですね。
プロジェクションにPlateCarreeを使用しているため、経度と緯度が等間隔に並んだ地図になっています。

ここからさらに、プロジェクションを変更したり、国境線やグリッドを追加したりと、
地図をカスタマイズしていくことができます。

例えば、プロジェクションをMercatorに変更し、ヨーロッパ付近にズームインするには、以下のように記述します。

fig = plt.figure(figsize=(10, 5))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.Mercator())

ax.set_extent([-10, 40, 30, 70])  # 経度-10〜40度、緯度30〜70度の範囲を表示

ax.coastlines(resolution='10m', color='black', linewidth=1)
ax.add_feature(cartopy.feature.BORDERS, linestyle='-', edgecolor='gray')
ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True)

plt.show()

このコードでは、以下のような地図が描画されます。

海岸線に加えて、国境線とグリッド(経緯度線)が描画され、ヨーロッパ地域が拡大表示されています。
Mercator図法を使用しているため、高緯度地域ほど面積が強調されて描画されていることが分かります。

このように、Cartopyでは基本的なコード構造に従いつつ、プロジェクションや描画する要素を変更するだけで、
多様な地図表現が可能になります。

次のセクションでは、プロジェクションの設定方法や、さまざまな地図要素の描画方法について、
より詳しく見ていきたいと思います。

地図をカスタマイズするテクニック

Cartopyで描画した地図をさらにカスタマイズして、自分好みの表現を実現してみましょう。
ここでは、プロジェクションの変更、海岸線や国境線の描画、色やスタイルの調整、等高線の追加など、
実用的なカスタマイズテクニックを紹介します。

プロジェクションの変更方法

Cartopyには、様々な地図プロジェクションが用意されています。
プロジェクションを変更するには、fig.add_subplot()projection引数に、目的のプロジェクションクラスを指定します。
ccrsモジュールには、PlateCarree、Mercator、Mollweide、Orthographic、Robinson、InterruptedGoodeHomolosineなど、
よく使われるプロジェクションが定義されています。

例えば、Mollweide図法を使用するには、以下のようにします。

fig = plt.figure(figsize=(10, 5))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.Mollweide())

ax.coastlines()
ax.gridlines()

plt.show()

Mollweide図法は、全球を歪みの少ない楕円形に表現するプロジェクションです。
世界全体の分布を見るのに適しています。

海岸線や国境線の追加方法

ax.coastlines()メソッドを使うと、地図に海岸線を描画できます。
resolution引数で解像度を指定でき、'110m''50m''10m'の3種類から選べます。
また、colorlinewidth引数で、線の色や太さをカスタマイズできます。

国境線や陸地、海洋など、他の地図要素を追加するには、ax.add_feature()メソッドを使います。
cartopy.featureモジュールには、追加可能な地図要素が定義されています。

ax.coastlines(resolution='10m', color='black', linewidth=1)
ax.add_feature(cartopy.feature.BORDERS, linestyle='-', edgecolor='gray')
ax.add_feature(cartopy.feature.LAND, facecolor='lightgreen')
ax.add_feature(cartopy.feature.OCEAN, facecolor='lightblue')

このコードでは、海岸線に加えて国境線を灰色の実線で描画し、陸地を明るい緑色、海洋を明るい青色で塗りつぶしています。

色やスタイルを変更するコツ

Matplotlibの色指定方法を使って、地図要素の色を自由に変更できます。
色名('red''blue'など)や16進数のカラーコード('#ff0000''#0000ff'など)を使用できます。
facecolor引数で塗りつぶし色を、edgecolor引数で線の色を指定します。

また、linestylelinewidth引数で、線のスタイルや太さを調整できます。
linestyle'-'(実線)、'--'(破線)、':'(点線)などの文字列で指定します。

ax.add_feature(cartopy.feature.LAND, facecolor='#f0e9d8', edgecolor='gray')
ax.add_feature(cartopy.feature.OCEAN, facecolor='#d9ecf3')
ax.coastlines(resolution='10m', color='#523a28', linewidth=0.5)

ここでは、陸地をベージュ色、海洋を淡い青色、海岸線を茶色の細線で表現しています。
このように色を調整するだけで、オリジナリティのある地図デザインを実現できます。

等高線の描画

等高線は、標高や気温、気圧などの値の分布を視覚化するのに便利です。
Cartopyでは、ax.contour()メソッドを使って等高線を描画できます。
等高線の間を塗りつぶすには、ax.contourf()メソッドを使います。

以下は、sin関数とcos関数を組み合わせた数式で生成した標高データを使って、等高線を描画する例です。表示例なので等高線の設定はめちゃくちゃですが…

lon = np.linspace(-180, 180, 360)
lat = np.linspace(-90, 90, 180)
lon2d, lat2d = np.meshgrid(lon, lat)
data = np.cos(np.deg2rad(lat2d) * 4) + np.sin(np.deg2rad(lon2d) * 4)

ax.contourf(lon2d, lat2d, data, transform=ccrs.PlateCarree(), cmap='coolwarm')
ax.contour(lon2d, lat2d, data, transform=ccrs.PlateCarree(), colors='black')

cmap引数で、値に応じた色の段階的な変化を表現するカラーマップを指定しています。
ここでは、'coolwarm'という青と赤の対照的なカラーマップを使用しています。

等高線を描画する際は、transform引数で座標系を指定する必要があります。
多くの場合、transform=ccrs.PlateCarree()とすれば問題ありません。

以上、Cartopyによる地図のカスタマイズテクニックを紹介しました。
プロジェクションや色、スタイルを工夫するだけで、ずいぶん印象の違う地図を作成できるのがお分かりいただけたかと思います。
ぜひ実際にコードを書きながら、自分だけの地図を作ってみてください。

次のセクションでは、点や線、ポリゴンなどの地物を地図上にプロットする方法や、
タイルマップを利用する方法など、より高度な地図の作成テクニックを見ていきます。

より高度な地図の作り方

ここまでで、Cartopyを使った基本的な地図の作成方法やカスタマイズテクニックを学びました。
このセクションでは、点や線、ポリゴンなどの地物を地図上にプロットする方法や、
タイルマップを利用して地図にリアルな表現を加える方法など、より高度な地図作成テクニックを紹介します。

点や線、ポリゴンのプロット

Cartopyでは、ax.plot()メソッドを使って点や線を、ax.fill()メソッドを使ってポリゴンを地図上にプロットできます。
以下は、それぞれの例です。

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(10, 5))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())

# 点をプロット
lon = np.array([135, -120, 30])
lat = np.array([35, 50, -25])
ax.plot(lon, lat, 'ro', transform=ccrs.PlateCarree())

# 線をプロット
lon_line = np.linspace(-150, 150, 100)
lat_line = 30 * np.sin(np.deg2rad(lon_line))
ax.plot(lon_line, lat_line, transform=ccrs.PlateCarree(), linewidth=2, color='blue')

# ポリゴンを塗りつぶし
lon_poly = np.array([[-100, -80, -80, -100, -100], [30, 30, 40, 40, 30]])
lat_poly = np.array([[20, 20, 30, 30, 20], [40, 50, 50, 40, 40]])
ax.fill(lon_poly, lat_poly, transform=ccrs.PlateCarree(), color='green', alpha=0.5)

ax.coastlines()
ax.gridlines()

plt.show()

このコードでは、3つの都市の位置を赤い点でプロットし、正弦波状の青い線を描画し、2つの四角形ポリゴンを半透明の緑色で塗りつぶしています。
プロットする際は、transform引数で座標系を指定する必要があります。多くの場合、transform=ccrs.PlateCarree()とすれば問題ありません。

点をプロットする際は、ax.scatter()メソッドを使うことで、色や大きさを変更できます。
また、ax.fill()メソッドでポリゴンを描画する際は、alpha引数で透明度を指定できます。

等高線の描画

前のセクションでも触れましたが、Cartopyではax.contour()ax.contourf()メソッドを使って等高線を描画できます。
ここでは、実際の標高データを使った例を紹介します。

import cartopy.crs as ccrs
import cartopy.feature as cfeature
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(10, 5))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())

# 標高データを読み込み
data = np.loadtxt('etopo1_bedrock.xyz')
lon = data[:, 0]
lat = data[:, 1]
elev = data[:, 2]

lon_range = slice(80, 160, 4)
lat_range = slice(-60, 60, 4)
lon2d, lat2d = np.meshgrid(lon[lon_range], lat[lat_range])
elev2d = elev.reshape(180, 360)[lat_range, lon_range]

# 等高線を描画
ax.contourf(lon2d, lat2d, elev2d, transform=ccrs.PlateCarree(), cmap='terrain')
ax.contour(lon2d, lat2d, elev2d, transform=ccrs.PlateCarree(), colors='black', linewidths=0.5)

ax.add_feature(cfeature.LAND)
ax.add_feature(cfeature.COASTLINE)
ax.gridlines()

plt.show()

このコードでは、ETOPO1の標高データを読み込み、アジア〜オーストラリア周辺の領域を切り出して、等高線を描画しています。
cmap='terrain'とすることで、標高に応じた色付けができます。
また、ax.contour()メソッドを使って等高線を重ねることで、標高の変化をより詳細に表現できます。

タイルマップの利用

Cartopyでは、ax.add_image()メソッドを使ってタイルマップを地図に追加できます。
タイルマップを利用すると、詳細な地形や道路、建物などを地図上に表現できるため、よりリアルな地図を作成できます。

import cartopy.crs as ccrs
import cartopy.io.img_tiles as cimgt
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())

# OpenStreetMapのタイルマップを追加
osm_tiles = cimgt.OSM()
ax.add_image(osm_tiles, 6)

# Stamen Terrainのタイルマップを追加
stamen_terrain = cimgt.Stamen('terrain-background')
ax.add_image(stamen_terrain, 6)

# 範囲を設定
ax.set_extent([135, 140, 34, 37])

plt.show()

ここでは、OpenStreetMapとStamen Terrainの2種類のタイルマップを重ねて表示しています。
ax.add_image()メソッドの第2引数は、ズームレベルを指定します。数値が大きいほど詳細な地図になります。
タイルマップを追加する際は、transform引数でタイルの座標系を指定する必要があります。
多くの場合、デフォルトの設定で問題ありません。

以上、点や線、ポリゴンのプロット、等高線の描画、タイルマップの利用など、
より高度な地図作成テクニックを紹介しました。
これらの方法を組み合わせることで、目的に応じた様々な地図表現が可能になります。

次のセクションでは、これまで学んだ技術を応用して、実際のデータを可視化する実践的な事例を見ていきます。

実践的な地図作成例

ここまでCartopyの基本的な使い方から応用的なテクニックまで学んできました。
このセクションでは、実際のデータを使った地図の可視化事例を紹介します。
気象データや人口密度データ、GPSの経路データなど、様々なデータを地図上に可視化する方法を見ていきましょう。

気象データの可視化

最初の例は、気象データの可視化です。ここでは、日本の気温データをヒートマップ形式で地図上に表示します。

import cartopy.crs as ccrs
import cartopy.io.shapereader as shapereader
import matplotlib.pyplot as plt
import numpy as np

# 気温データを読み込み
data = np.loadtxt('temperature.csv', delimiter=',', skiprows=1)
lon = data[:, 0]
lat = data[:, 1]
temp = data[:, 2]

fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())

# 気温データをヒートマップで可視化
lon2d, lat2d = np.meshgrid(lon, lat)
ax.pcolormesh(lon2d, lat2d, temp.reshape(len(lat), len(lon)), cmap='coolwarm', transform=ccrs.PlateCarree())

ax.coastlines()
ax.gridlines()

# シェープファイルから都道府県境界を読み込んで表示
shpfilename = shapereader.natural_earth(resolution='10m', category='cultural', name='admin_1_states_provinces')
ax.add_geometries(shapereader.Reader(shpfilename).geometries(), ccrs.PlateCarree(), edgecolor='black', facecolor='none')

plt.colorbar(label='Temperature (°C)')

plt.show()

ax.pcolormesh()を使って、気温データをヒートマップ形式で可視化しています。
cartopy.io.shapereaderモジュールを使って、都道府県境界のシェープファイルを読み込み、
ax.add_geometries()で地図上に描画しています。
これにより、気温の分布と地域の関係がわかりやすく表現されています。

人口密度の可視化

次は、世界の人口密度データを地図上に可視化する例です。

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

# 人口密度データを読み込み
df = pd.read_csv('population_density.csv')

fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.Robinson())

# 人口密度に応じた色と大きさの点をプロット
ax.scatter(df['lon'], df['lat'], s=df['population'] / 1000000, c=df['density'], cmap='Reds', alpha=0.5, transform=ccrs.PlateCarree())

ax.coastlines()
ax.gridlines()

plt.colorbar(label='Population Density (people/km²)')

plt.show()

人口密度データをCSVファイルから読み込み、ax.scatter()で地図上にプロットしています。
人口密度に応じて点の色と大きさを変えることで、視覚的に人口分布の特徴を捉えることができます。
ここではRobinson図法を使用し、世界全体の人口分布を一目で把握できるように表現しています。

経路の可視化

最後は、GPSデータから取得した経路を地図上に可視化する例です。

import cartopy.crs as ccrs
import cartopy.io.img_tiles as cimgt
import matplotlib.pyplot as plt
import numpy as np

# 経路データを読み込み
data = np.loadtxt('route.csv', delimiter=',', skiprows=1)
lon = data[:, 0]
lat = data[:, 1]

fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())

# OpenStreetMapのタイルマップを追加
osm_tiles = cimgt.OSM()
ax.add_image(osm_tiles, 6)

# 経路を線でつないで表示
ax.plot(lon, lat, color='red', linewidth=2, transform=ccrs.PlateCarree())

ax.set_extent([lon.min() - 0.1, lon.max() + 0.1, lat.min() - 0.1, lat.max() + 0.1])

plt.show()

経路データをCSVファイルから読み込み、ax.plot()で地図上に線をプロットしています。
背景にOpenStreetMapのタイルマップを追加することで、経路と地図の関係がわかりやすくなります。
ax.set_extent()で経路が収まるように地図の範囲を設定しているため、詳細な経路を確認できます。

以上、Cartopyを使った実践的な地図可視化の事例を3つ紹介しました。
気象データ、人口密度データ、経路データなど、様々なデータを地図と組み合わせて可視化することで、
データの持つ地理的な特徴や傾向を効果的に表現できます。
プロジェクトに応じて、これらの事例を参考にしながら、オリジナルの地図を作成してみてください。

次のセクションでは、Cartopyを使う上での便利なTipsをいくつか紹介します。
パフォーマンスの改善方法や、他のライブラリとの連携方法などを取り上げますので、お楽しみに。

Cartopyに関するTips

ここまで、Cartopyの基本的な使い方から実践的な応用例まで見てきました。
最後に、Cartopyを使う上で役立つTipsをいくつか紹介します。
パフォーマンス改善のヒントや、他のライブラリとの連携方法などを取り上げますので、参考にしてみてください。

パフォーマンス改善のヒント

Cartopyで地図を描画する際、パフォーマンスの改善が必要になることがあります。
特に、大量のデータを扱う場合や、インタラクティブな操作が必要な場合は、描画速度の向上が重要です。
ここでは、パフォーマンス改善のヒントをいくつか紹介します。

  • 描画する地図要素を最小限に抑える
  • 不要な要素を描画しないことで、描画速度を向上できます
  • ax.set_extent()で描画範囲を限定する
  • 描画範囲を限定することで、不要な部分の描画を省略できます
  • shapelyライブラリを使って、シェープファイルから必要な部分だけを抽出する
  • シェープファイル全体を読み込むのではなく、必要な部分だけを抽出することで、メモリ使用量と描画時間を削減できます

以下は、描画範囲を限定し、シェープファイルから必要な部分だけを抽出する例です。

import cartopy.crs as ccrs
import cartopy.io.shapereader as shapereader
import matplotlib.pyplot as plt
from shapely.geometry import box

fig = plt.figure(figsize=(10, 10))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())

# 描画範囲を限定
extent = [-120, -80, 20, 50]
ax.set_extent(extent)

# シェープファイルから必要な部分だけを抽出
usa_shp = shapereader.natural_earth(resolution='10m', category='cultural', name='admin_0_countries')
usa_geom = [geom for geom in shapereader.Reader(usa_shp).geometries() if box(*extent).intersects(geom)]
ax.add_geometries(usa_geom, ccrs.PlateCarree(), edgecolor='black', facecolor='none')

ax.coastlines()
ax.gridlines()

plt.show()

ここでは、extent変数で描画範囲を指定し、ax.set_extent()で適用しています。
また、shapelyboxを使って範囲内に収まるジオメトリだけを抽出し、ax.add_geometries()で描画しています。
これにより、アメリカ大陸の一部だけを効率的に描画できます。

他のライブラリとの連携方法

Cartopyは、他の地理情報関連のPythonライブラリと連携することで、より多彩な地図表現が可能になります。
ここでは、geopandasを使ってシェープファイルからデータを読み込み、地図上にプロットする例を紹介します。

import geopandas as gpd
import matplotlib.pyplot as plt

fig, ax = plt.subplots(subplot_kw={'projection': ccrs.PlateCarree()})

# GeoDataFrameからデータを読み込み
gdf = gpd.read_file('countries.shp')

# 地図上にプロット
gdf.plot(ax=ax, cmap='viridis', edgecolor='black', linewidth=0.5)
ax.coastlines()
ax.gridlines()
plt.show()

geopandasread_file()を使ってシェープファイルからデータを読み込み、GeoDataFrameを作成します。
plot()メソッドを使って、GeoDataFrameを地図上にプロットできます。
このように、geopandasと組み合わせることで、シェープファイルの扱いが簡単になります。

他にも、rasterioを使ってラスターデータを読み込んだり、foliumを使ってインタラクティブな地図を作成したりできます。
プロジェクトの要件に応じて、適切なライブラリを選択し、Cartopyと連携させることをおすすめします。

ギャラリーや参考資料の紹介

Cartopyの使い方を学ぶ上で、ギャラリーや参考資料を活用することをおすすめします。
以下は、役立つリソースの一部です。

これらのリソースを参考に、Cartopyの使い方を深く理解し、自分のプロジェクトに活かしていってください。

以上、Cartopyに関するTipsを紹介しました。
パフォーマンス改善のヒントや、他のライブラリとの連携方法を活用することで、より効果的な地図作成が可能になります。
また、ギャラリーや参考資料を活用することで、新しいアイデアやテクニックを学ぶことができます。
Cartopyの可能性を最大限に引き出し、魅力的な地図を作成してください。

まとめ

本記事では、Pythonの地図描画ライブラリ「Cartopy」の使い方を基礎から応用まで詳しく解説してきました。
ここでは、記事の内容を振り返り、Cartopyを使うメリットを再確認します。また、今後の学習や実践に向けたアドバイスを提供します。

Cartopyを使うメリットの再確認

  • Pythonの知識があれば、誰でも簡単に美しい地図を作成できる
  • 多様な地図プロジェクションに対応し、柔軟な描画が可能
  • Matplotlibベースで、他のプロットと組み合わせて使える
  • 点や線、ポリゴンなどの地物を自在に描画できる
  • 地理院タイルなどのタイルマップを重ねて表示できる

Cartopyは、Pythonユーザーにとって非常に魅力的な地図描画ライブラリです。
シンプルなコードで美しい地図を作成できるだけでなく、様々なカスタマイズが可能なため、
目的に応じた幅広い表現が可能です。
Matplotlib等と組み合わせることで、地図とグラフを融合させた視覚的に優れた可視化も実現できます。

記事のおさらい

本記事では、以下の内容について解説しました。

  1. Cartopyのインストール方法と基本的な地図の描画方法
  2. プロジェクションの設定や地図要素のカスタマイズ方法
  3. 点や線、ポリゴンの描画、等高線の追加、タイルマップの利用など
  4. 気象データ、人口密度データ、経路データを使った実践的な可視化事例
  5. パフォーマンス改善のヒントや他のライブラリとの連携方法

実行可能なコード例を数多く示しながら、段階的にCartopyの使い方を解説してきました。
基本的な地図の描画から始まり、徐々に高度な表現や実践的な応用例へと進みました。
また、効率的な地図描画のためのTipsや、他のライブラリとの連携方法なども紹介しました。

今後に向けたアドバイス

Cartopyを使いこなすには、実際に手を動かして地図を作成してみることが大切です。
以下のようなアプローチで、Cartopyの理解を深め、スキルを向上させていくことをおすすめします。

  • 公式ギャラリーやMatplotlibのギャラリーを参考に、様々な地図表現を試してみる
  • シェープファイルやラスターデータなど、地理空間データの扱い方を学ぶ
  • 地図をインタラクティブに操作できるライブラリ(Foliumなど)にも挑戦してみる
  • 地図を使ったデータ分析や可視化に積極的に取り組んでみる

Cartopyを使いこなすことで、地理空間データの可視化の幅が大きく広がります。
ぜひ、自分のプロジェクトや研究に活かしてみてください。

最後に、シンプルな世界地図の描画コードを示して、記事の締めくくりとします。

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
import numpy as np

# 描画領域を作成
fig = plt.figure(figsize=(10, 5))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.Robinson())

# 海岸線を描画
ax.coastlines(resolution='50m', color='black', linewidth=0.5)

# 緯度線と経度線を描画 
ax.gridlines(linestyle='--', color='gray', linewidth=0.5)

# 陸地と海洋を塗りつぶし
ax.add_feature(cartopy.feature.LAND, facecolor='lightgreen')
ax.add_feature(cartopy.feature.OCEAN, facecolor='lightblue')

# タイトルを追加
ax.set_title('World Map with Cartopy', fontsize=16)

plt.show()

以上で、「【初心者向け】たった10行のPythonコードでカッコいい地図を作る!Cartopy入門ガイド」を終わります。
Cartopyの基礎から応用まで、実践的な使い方を学んでいただけたかと思います。
美しい地図を作成するための第一歩を踏み出すことができたのではないでしょうか。
今後も、Pythonと地理空間データの可能性を追求し、魅力的な可視化にチャレンジしていってください。

読んでいただき、ありがとうございました。