0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Automating GIS Processes 2024 写経 Lesson 5(Static-maps 後半)

Posted at

前回 の続きです。

Adding a legend

To plot a legend for a map, add the legend=True parameter.
For figures without a classification scheme, the legend consists of a colour gradient bar. The legend is an instance of matplotlib.pyplot.colorbar.Colorbar, and all arguments defined in legend_kwds are passed through to it. See below how to use the label property to set the legend title:

凡例を表示するために、legend=Trueパラメータを追加してください。

schemeによる分類がない場合、凡例はカラーグラデーションバーです。matplotlib.pyplot.colorbar.Colorbarのインスタンスです。

legend_kwdsで定義されているすべての引数がカラーバーに渡されます。labelプロパティでカラーバーのタイトルを表示します。

ax = accessibility_grid.plot(
    figsize=(12, 8),

    column="pt_r_t",
    cmap="Spectral",
    linewidth=0,
    alpha=0.8,

    legend=True,
    legend_kwds={"label": "Travel time (min)"}
)

image.png

Hint: Set Other Colorbar Parameters
Check out matplotlib.pyplot.colorbar.Colorbar’s documentation and experiment with other parameters! Anything you add to the legend_kwds dictionary will be passed to the color bar.

ヒント:カラーバーの他のパラメータを設定する
matplotlib.pyplot.colorbar.Colorbarのドキュメントを見て、他のパラメータを試してください!
ディクショナリ型のlegend_kwdsに追加したものは何でも、カラーバーに渡されます。

For figures that use a classification scheme, on the other hand, plot() creates a matplotlib.legend.Legend. Again, legend_kwds are passed through, but the parameters are slightly different: for instance, use title instead of label to set the legend title:

schemeによる分類がある場合、plot()メソッドはmatplotlib.legend.Legendを作ります。

繰り返しになりますが、legend_kwdsで定義されているすべての引数が渡されます。しかし、パラメータは少しだけ違います。例えば、凡例にタイトルを設定するときは、labelではなく、titleを使います。

accessibility_grid.plot(
    figsize=(12, 8),

    column="pt_r_t",
    scheme="quantiles",
    cmap="Spectral",
    linewidth=0,
    alpha=0.8,

    legend=True,
    legend_kwds={"title": "Travel time (min)"}
)

image.png

Hint: Set Other Legend Parameters
Check out matplotlib.pyplot.legend.Legend’s documentation, and experiment with other parameters! Anything you add to the legend_kwds dictionary will be passed to the legend.
What legend_kwds keyword would spread the legend onto two columns?

ヒント:他の凡例のパラメータを設定する

matplotlib.pyplot.legend.Legendのドキュメントを見て、他のパラメータを試してください!
ディクショナリ型のlegend_kwdsに追加したものは何でも、カラーバーに渡されます。

どのlegend_kwdsキーワードが凡例を二列に広げるでしょうか?

これはやってみましょう。"ncols"使います。

accessibility_grid.plot(
    figsize=(12, 8),

    column="pt_r_t",
    scheme="quantiles",
    cmap="Spectral",
    linewidth=0,
    alpha=0.8,

    legend=True,
    legend_kwds={
        "title": "Travel time (min)",
        "ncols": 2
        }
)

image.png

凡例が二列になりました。

Adding a base map

For better orientation, it is often helpful to add a base map to a map plot. A base map, for instance, from map providers such as OpenStreetMap or Stamen, adds streets, place names, and other contextual information.

地図プロットにベースマップを追加することはしばしば役に立ちます。ベースマップとは、例えば、OpenStreetMapStamenのように、道路を追加したり、名称や関連する情報を付加した地図で、地図プロバイダーが用意しているものです。

The Python package contextily takes care of downloading the necessary map tiles and rendering them in a geopandas plot.

PythonのパッケージContextilyによって、必要な地図タイルをダウンロードし、geopandasのプロットでレンダリングすることができます。

Caution: Web Mercator
Map tiles from online map providers are typically in Web Mercator projection (EPSG:3857). It is generally advisable to transform all other layers to EPSG:3857, too.

注意:Webメルカトル
オンライン地図プロバイダーの地図タイルは、通常、Webメルカトル(EPSG:3857)で投影されています。基本的には、他のレイヤーをEPSG:3857に変換することをお薦めします。

accessibility_grid = accessibility_grid.to_crs("EPSG:3857")
metro = metro.to_crs("EPSG:3857")
roads = roads.to_crs("EPSG:3857")

print(accessibility_grid.crs)
print(metro.crs)
print(roads.crs)

image.png

To add a base map to an existing plot, use the contextily.add_basemap() function, and supply the plot’s ax object obtained in an earlier step.

既存のプロットにベースマップを追加するため、contextily.add_basemap()関数を使ってください。そして、この関数に、取得済みのプロットのaxオブジェクトを渡してください。

おや、エラーになりました。
image.png

ModuleNotFoundError: No module named 'contextily'、つまりcontextilyが見つからないので、contextilyをインストールします。

!pip install contextily

image.png

では、もう一度。

import contextily

ax = accessibility_grid.plot(
    figsize=(12, 8),

    column="pt_r_t",
    scheme="quantiles",
    cmap="Spectral",
    linewidth=0,
    alpha=0.8,

    legend=True,
    legend_kwds={"title": "Travel time (min)"}
)
contextily.add_basemap(ax, source=contextily.providers.OpenStreetMap.Mapnik)

image.png

今度は表示されました。良さそうです。

There are many other online maps to choose from. Any of the other contextily.providers (see link above) can be passed as a source to add_basemap(). You can get a list of available providers:

他にも選択できるオンライン地図はたくさんあります。

contextily.providersのいずれ(以下を参照)も、sourceとして、contextily.add_basemap()関数に渡すことができます。使用可能なプロバイダーのリストも取得できます。

image.png

In this zoom level, the benefits from using OpenStreetMap (such as place names) do not live to their full potential. Let’s look at a subset of the travel time matrix: grid cells that are within 15 minutes from the railway station.

このズームレベルでは、(広範囲をカバーしすぎて)OpenStreetMap(名称の付加など)は、そのポテンシャルを発揮できません。移動時間のマトリックスのサブセット(鉄道の駅から15分以内のグリッドセル)を見ましょう。

ax = accessibility_grid[accessibility_grid.pt_r_t <= 15].plot(
    figsize=(12, 8),

    column="pt_r_t",
    scheme="quantiles",
    k=5,
    cmap="Spectral",
    linewidth=0,
    alpha=0.8,

    legend=True,
    legend_kwds={"title": "Travel time (min)"}
)
contextily.add_basemap(
    ax,
    source=contextily.providers.OpenStreetMap.Mapnik
)

image.png

Finally, we can modify the attribution (copyright notice) displayed in the bottom left of the map plot. Note that you should always respect the map providers’ terms of use, which typically include a data source attribution (contextily’s defaults take care of this). We can and should, however, add a data source for any layer we added, such as the travel time matrix data set:

最後に、私たちは、地図のプロットの左下に表示された帰属情報(著作権通知)を修正できます。常に地図プロバイダーの使用規約を尊重する必要があります。それは通常、データの源泉の帰属情報を含みます。(contextilyはデフォルトでこれらを管理します。)
しかし、私たちは地図として表示したどのレイヤーについても、データの源泉を追加できる、もしくは、追加すべきです。例えば、移動時間のデータセットの帰属情報を追加する場合は、以下となります。

ax = accessibility_grid[accessibility_grid.pt_r_t <= 15].plot(
    figsize=(12, 8),

    column="pt_r_t",
    scheme="quantiles",
    k=5,
    cmap="Spectral",
    linewidth=0,
    alpha=0.8,

    legend=True,
    legend_kwds={"title": "Travel time (min)"}
)

contextily.add_basemap(
    ax,
    source=contextily.providers.OpenStreetMap.Mapnik,
    attribution=(
        "Travel time data (c) Digital Geography Lab, "
        "map data (c) OpenStreetMap contributors"
    )
)

image.png

よく見ると、帰属情報が変わっていますね。
image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?