前回 の続きです。
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)"}
)
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)"}
)
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
}
)
凡例が二列になりました。
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.
地図プロットにベースマップを追加することはしばしば役に立ちます。ベースマップとは、例えば、OpenStreetMapやStamenのように、道路を追加したり、名称や関連する情報を付加した地図で、地図プロバイダーが用意しているものです。
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)
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
オブジェクトを渡してください。
ModuleNotFoundError: No module named 'contextily'
、つまりcontextilyが見つからないので、contextilyをインストールします。
!pip install contextily
では、もう一度。
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)
今度は表示されました。良さそうです。
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()
関数に渡すことができます。使用可能なプロバイダーのリストも取得できます。
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
)
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"
)
)