Geopandas permet de créer des objets GeoDataFrame; ces objets très similaires aux DataFrame de Pandas, ont cependant la particularité de posséder une série géométrique qualifiée de GeoSeries contenant des coordonnées spatiales.
>>> import geopandas as gp
Un objet GeoSeries est une séries constituées d’éléments représentant des coordonnées spatiales.
Les GeoSeries peuvent représenter des Point, des LineString, ou des Polygon
Un GeoSeries avec un seul point:
>>> pt = (2,6)
>>> gsp = gp.GeoSeries(Point(pt))
>>> gsp
0 POINT (2 6)
dtype: object
>>> gsp.plot()
<matplotlib.axes._subplots.AxesSubplot object at 0x66dac5d0>
>>> plt.show()
Un GeoSeries avec 3 points:
>>> gsmp = gp.GeoSeries([Point(2,4), Point(8,1), Point(13,15)])
>>> gsmp
0 POINT (2 4)
1 POINT (8 1)
2 POINT (13 15)
dtype: object
>>> gsmp.plot()
<matplotlib.axes._subplots.AxesSubplot object at 0x66de5150>
>>> plt.show()
Si vous voulez sauvegarder le graphique, utilisez l’objet plt (matplotlib):
>>> plt.savefig("multipoints.png")
Un GeoSeries de une ligne:
>>> ln =((2,2),(3,3),(4,4))
>>> gsl = gp.GeoSeries(LineString(ln))
>>> gsl
0 LINESTRING (2 2, 3 3, 4 4)
dtype: object
>>> gsl.plot()
<matplotlib.axes._subplots.AxesSubplot object at 0x66c4b7b0>
>>> plt.show()
Il est aussi possible de faire des GeoSeries contenant plusieurs lignes gp.GeoSeries([LineString(ln), LineString(ln2), LineString(ln3)])
>>> crd = ((0., 0.), (0., 1.), (1., 1.), (1., 0.), (0., 0.))
>>> poly = gp.GeoSeries(Polygon(crd))
>>> poly
0 POLYGON ((0 0, 0 1, 1 1, 1 0, 0 0))
dtype: object
>>> poly.plot()
<matplotlib.axes._subplots.AxesSubplot object at 0x66ad9310>
>>> plt.show()
>>> poly.plot(color="r")
<matplotlib.axes._subplots.AxesSubplot object at 0x669654d0>
>>> plt.show()
Il est aussi possible de faire des GeoSeries contenant plusieurs polygones: gp.GeoSeries([Polygon(crd), Polygon(crd2), Polygon(crd3)])
Un objet GeoDataFrame contient nécessairement une série géométrique de type GeoSeries; il contient en plus d’autres Series "classiques" représentant des données qui se trouvent ainsi géolocalisées.
>>> world = gp.read_file(gp.datasets.get_path('naturalearth_lowres'))
>>> cities = gp.read_file(gp.datasets.get_path('naturalearth_cities'))
>>> world.head()
pop_est continent name iso_a3 gdp_md_est geometry
0 920938 Oceania Fiji FJI 8374.0 (POLYGON ((180 -16.06713266364245, 180 -16.555...
1 53950935 Africa Tanzania TZA 150600.0 POLYGON ((33.90371119710453 -0.950000000000000...
2 603253 Africa W. Sahara ESH 906.5 POLYGON ((-8.665589565454809 27.65642588959236...
3 35623680 North America Canada CAN 1674000.0 (POLYGON ((-122.84 49.00000000000011, -122.974...
4 326625791 North America United States of America USA 18560000.0 (POLYGON ((-122.84 49.00000000000011, -120 49....
>>> cities.head()
name geometry
0 Vatican City POINT (12.45338654497177 41.90328217996012)
1 San Marino POINT (12.44177015780014 43.936095834768)
2 Vaduz POINT (9.516669472907267 47.13372377429357)
3 Luxembourg POINT (6.130002806227083 49.61166037912108)
4 Palikir POINT (158.1499743237623 6.916643696007725)
>>> world.keys()
Index(['pop_est', 'continent', 'name', 'iso_a3', 'gdp_md_est', 'geometry'], dtype='object')
>>> cities.keys()
Index(['name', 'geometry'], dtype='object')
Il est possible de filtrer un GeoDataFrame:
>>> senegal = world[(world.name == "Senegal")]
>>> senegal
pop_est continent name iso_a3 gdp_md_est geometry
51 14668522 Africa Senegal SEN 39720.0 POLYGON ((-16.71372880702347 13.59495860437985...
>>> petit_pays_afrique = world[(world.continent == "Africa") & (world.pop_est < 800000)]
>>> petit_pays_afrique
pop_est continent name iso_a3 gdp_md_est geometry
2 603253 Africa W. Sahara ESH 906.5 POLYGON ((-8.665589565454809 27.65642588959236...
69 778358 Africa Eq. Guinea GNQ 31770.0 POLYGON ((9.649158155972628 2.283866075037736,...
>>> world.plot()
>>> plt.show()
Ajouter un code de couleur relatif à une colonne de GeoDataFrame
>>> world.plot(column='pop_est')
>>> plt.show()
Ajouter une légende (Cet exemple est extrait de la documentation officielle de GeoPandas):
>>> from mpl_toolkits.axes_grid1 import make_axes_locatable
>>> fig, ax = plt.subplots(1, 1)
>>> divider = make_axes_locatable(ax)
>>> cax = divider.append_axes("right", size="5%", pad=0.1)
>>> world.plot(column='pop_est', ax=ax, legend=True, cax=cax)
>>> plt.show()
Modifier le code couleurs:
>>> plt.colormaps()
['Accent', 'Accent_r', 'Blues', 'Blues_r', 'BrBG', 'BrBG_r', 'BuGn', 'BuGn_r', 'BuPu', 'BuPu_r', 'CMRmap', 'CMRmap_r', 'Dark2', 'Dark2_r', 'G�nBu', 'GnBu_r', 'Greens', 'Greens_r', 'Greys', 'Greys_r', 'OrRd', 'OrRd_r', 'Oranges', 'Oranges_r', 'PRGn', 'PRGn_r', 'Paired', 'Paired_r', '�Pastel1', 'Pastel1_r', 'Pastel2', 'Pastel2_r', 'PiYG', 'PiYG_r', 'PuBu', 'PuBuGn', 'PuBuGn_r', 'PuBu_r', 'PuOr', 'PuOr_r', 'PuRd', 'PuRd_r', �'Purples', 'Purples_r', 'RdBu', 'RdBu_r', 'RdGy', 'RdGy_r', 'RdPu', 'RdPu_r', 'RdYlBu', 'RdYlBu_r', 'RdYlGn', 'RdYlGn_r', 'Reds', 'Reds_r', '�Set1', 'Set1_r', 'Set2', 'Set2_r', 'Set3', 'Set3_r', 'Spectral', 'Spectral_r', 'Wistia', 'Wistia_r', 'YlGn', 'YlGnBu', 'YlGnBu_r', 'YlGn_r', �'YlOrBr', 'YlOrBr_r', 'YlOrRd', 'YlOrRd_r', 'afmhot', 'afmhot_r', 'autumn', 'autumn_r', 'binary', 'binary_r', 'bone', 'bone_r', 'brg', 'brg_r�', 'bwr', 'bwr_r', 'cividis', 'cividis_r', 'cool', 'cool_r', 'coolwarm', 'coolwarm_r', 'copper', 'copper_r', 'cubehelix', 'cubehelix_r', 'fla�g', 'flag_r', 'gist_earth', 'gist_earth_r', 'gist_gray', 'gist_gray_r', 'gist_heat', 'gist_heat_r', 'gist_ncar', 'gist_ncar_r', 'gist_rainbow�', 'gist_rainbow_r', 'gist_stern', 'gist_stern_r', 'gist_yarg', 'gist_yarg_r', 'gnuplot', 'gnuplot2', 'gnuplot2_r', 'gnuplot_r', 'gray', 'gra�y_r', 'hot', 'hot_r', 'hsv', 'hsv_r', 'icefire', 'icefire_r', 'inferno', 'inferno_r', 'jet', 'jet_r', 'magma', 'magma_r', 'mako', 'mako_r', '�nipy_spectral', 'nipy_spectral_r', 'ocean', 'ocean_r', 'pink', 'pink_r', 'plasma', 'plasma_r', 'prism', 'prism_r', 'rainbow', 'rainbow_r', 'r�ocket', 'rocket_r', 'seismic', 'seismic_r', 'spring', 'spring_r', 'summer', 'summer_r', 'tab10', 'tab10_r', 'tab20', 'tab20_r', 'tab20b', 'ta�b20b_r', 'tab20c', 'tab20c_r', 'terrain', 'terrain_r', 'viridis', 'viridis_r', 'vlag', 'vlag_r', 'winter', 'winter_r']
On va choisir le code couleurs PRGn:
>>> world.plot(column='pop_est', ax=ax, legend=True, cax=cax, cmap="PRGn")
<matplotlib.axes._subplots.AxesSubplot object at 0x67756050>
>>> plt.show()








