1. 程式人生 > >python練習筆記(4)-製作地圖

python練習筆記(4)-製作地圖

Mapping Tools地圖對映工具

geopandas provides a high-level interface to the matplotlib library for making maps. Mapping shapes is as easy as using the plot() method on a GeoSeries or GeoDataFrame.

geopandas為matplotlib庫提供了一個用於製作地圖的高階介面。 對映形狀就像在GeoSeries或GeoDataFrame上使用plot()方法一樣簡單。

Loading some example data:載入一些示例資料:

In [1]: world = geopandas.read_file(geopandas.datasets.get_path('naturalearth_lowres'))

In [2]: cities = geopandas.read_file(geopandas.datasets.get_path('naturalearth_cities'))

We can now plot those GeoDataFrames:我們現在可以繪製那些地理資料要素了

# Examine country GeoDataFrame
In [3]: world.head()
Out[3]: 
      pop_est                        ...                                                                   geometry
0  28400000.0                        ...                          POLYGON ((61.21081709172574 35.65007233330923,...
1  12799293.0                        ...                          (POLYGON ((16.32652835456705 -5.87747039146621...
2   3639453.0                        ...                          POLYGON ((20.59024743010491 41.85540416113361,...
3   4798491.0                        ...                          POLYGON ((51.57951867046327 24.24549713795111,...
4  40913584.0                        ...                          (POLYGON ((-65.50000000000003 -55.199999999999...

[5 rows x 6 columns]

# Basic plot, random colors
In [4]: world.plot();

_images/world_randomcolors.png

Note that in general, any options one can pass to pyplot in matplotlib (or style options that work for lines) can be passed to the plot() method.

請注意,通常,可以將任何可以傳遞給matplotlib中的pyplot的選項(或適用於行的樣式選項)傳遞給plot()方法。

Choropleth Maps彩色地圖

geopandas makes it easy to create Choropleth maps (maps where the color of each shape is based on the value of an associated variable). Simply use the plot command with the column

 argument set to the column whose values you want used to assign colors. geopandas可以輕鬆建立Choropleth地圖(每個形狀的顏色基於相關變數的值的地圖)。 只需使用plot命令,並將列引數設定為要用於指定顏色值的列。

# Plot by GDP per capta
In [5]: world = world[(world.pop_est>0) & (world.name!="Antarctica")]

In [6]: world['gdp_per_cap'] = world.gdp_md_est / world.pop_est

In [7]: world.plot(column='gdp_per_cap');

_images/world_gdp_per_cap.png

Choosing colors選擇顏色

One can also modify the colors used by plot with the cmap option (for a full list of colormaps, see the matplotlib website):

也可以使用cmap選項修改plot使用的顏色(有關colormaps的完整列表,請參閱matplotlib網站):

In [8]: world.plot(column='gdp_per_cap', cmap='OrRd');

_images/world_gdp_per_cap_red.png

The way color maps are scaled can also be manipulated with the scheme option (if you have pysal installed, which can be accomplished via conda install pysal). The scheme option can be set to ‘equal_interval’, ‘quantiles’ or ‘percentiles’. See the PySAL documentation for further details about these map classification schemes.

縮放顏色貼圖的方式也可以使用scheme選項進行操作(如果安裝了pysal,可以通過conda install pysal完成)。 scheme選項可以設定為'equal_interval','quantiles'或'percentiles'。 有關這些地圖分類方案的更多詳細資訊,請參閱PySAL文件。

In [9]: world.plot(column='gdp_per_cap', cmap='OrRd', scheme='quantiles');

_images/world_gdp_per_cap_quantiles.png

Maps with Layers帶圖層的地圖

There are two strategies for making a map with multiple layers – one more succinct, and one that is a little more flexible.

製作具有多個圖層的地圖有兩種策略 - 一種更簡潔,另一種更靈活。

Before combining maps, however, remember to always ensure they share a common CRS (so they will align).

但是,在組合地圖之前,請記住始終確保它們共享一個共同的CRS(因此它們將對齊)。

# Look at capitals
# Note use of standard `pyplot` line style options
In [10]: cities.plot(marker='*', color='green', markersize=5);

# Check crs
In [11]: cities = cities.to_crs(world.crs)

# Now we can overlay over country outlines
# And yes, there are lots of island capitals
# apparently in the middle of the ocean!

_images/capitals.png

Method 1

In [12]: base = world.plot(color='white', edgecolor='black')

In [13]: cities.plot(ax=base, marker='o', color='red', markersize=5);

_images/capitals_over_countries_1.png

Method 2: Using matplotlib objects

In [14]: import matplotlib.pyplot as plt

In [15]: fig, ax = plt.subplots()

# set aspect to equal. This is done automatically
# when using *geopandas* plot on it's own, but not when
# working with pyplot directly.
In [16]: ax.set_aspect('equal')

In [17]: world.plot(ax=ax, color='white', edgecolor='black')
Out[17]: <matplotlib.axes._subplots.AxesSubplot at 0x7fb7ac190048>

In [18]: cities.plot(ax=ax, marker='o', color='red', markersize=5)
Out[18]: <matplotlib.axes._subplots.AxesSubplot at 0x7fb7ac190048>

In [19]: plt.show();

_images/capitals_over_countries_2.png

Other Resources

Links to jupyter Notebooks for different mapping tasks: