I created a simple geopandas
map using a shape file from OpenStreetMap (link).
import geopandas as gpd map_gdf = gpd.read_file('path_to_shapefile') map_gdf.plot()
Out:
How can I restrict the plot to only a certain portion of the image, essentially zooming in on a certain location. Can I do this by specifying the extent of the portion of the map which I’d like to plot in latitude and longitude?
Advertisement
Answer
The .plot()
method of geopandas.GeoDataFrame
returns a Matplotlib Axes
object. In other words, you can simply assign the returned map to an Axes
object and then use set_xlim and set_ylim to control the bound values.
For example, let’s use a sample dataset from geopandas
import geopandas as gpd import matplotlib.pyplot as plt # read sample dataset data = gpd.datasets.get_path('naturalearth_lowres') gdf = gpd.read_file(data) # create an Axes object and plot the map fig, ax = plt.subplots(figsize=(10, 10)) gdf.plot(ax=ax)
The default map returned looks like the following:
You can use set_xlim
and set_ylim
to change the bounds.
# create an Axes object and plot the map fig, ax = plt.subplots(figsize=(10, 10)) gdf.plot(ax=ax) ax.set_xlim(0, 100) ax.set_ylim(-50, 50)
This will produce the following map
If you want to dynamically change the bounds, each geometry object in GeoDataFrame
has a total_bounds
attribute. Assuming you want to concentrate on Australia,
# create an Axes object and plot the map fig, ax = plt.subplots(figsize=(10, 10)) gdf.plot(ax=ax) xmin, ymin, xmax, ymax = gdf[gdf.name == 'Australia'].total_bounds pad = 5 # add a padding around the geometry ax.set_xlim(xmin-pad, xmax+pad) ax.set_ylim(ymin-pad, ymax+pad)
This will get you