user14074311
user14074311

Reputation:

Plotting coordinates with Matplotlib is distorting the base-map

I am trying to show a spatial distribution of shops on a map using Geopandas and Matplotlib.

Problem: When I am plotting the pins the base map gets distorted. Here is a sample before plotting the pins polygon and after after.

Question: What is the source of this distortion? How can I prevent it?

import pandas as pd
import geopandas as gpd
import matplotlib.pyplot as plt
from shapely.geometry import Polygon

# Creating the simplified polygon
latitude = [60.41125, 59.99236, 59.99236]
longitude = [24.66917, 24.66917, 25.36972]
geometry = Polygon(zip(longitude, latitude))
polygon = gpd.GeoDataFrame(index=[0], crs = 'epsg:4326', geometry=[geometry]) 

# ploting  the basemap
ax = polygon.plot(color="#3791CB")

# Dict of sample coordinates
coordinates = {"latitude": ["60.193141", "60.292777", "60.175053", "60.163187", "60.245272", "60.154392", "60.182906"],
"longitude": ["24.934214", "24.969730", "24.831068", "24.739044", "24.860983", "24.884773", "24.959175"]}

# Creating a dataframe from coordinates
df = pd.DataFrame(coordinates)

# Creating the GeoDataFrame
shops = gpd.GeoDataFrame(coordinates, geometry=gpd.points_from_xy(df.longitude, df.latitude))

# Plotting office coordinates
shops.plot(ax=ax, color="red", markersize = 20, zorder=2)

# adding grid
plt.grid(linestyle=":", color='grey')

plt.show()

Thank you!

Upvotes: 1

Views: 599

Answers (1)

Geom
Geom

Reputation: 1546

You're map and pins have different reference systems..

When you create your first GeoDataFrame you specify its Coordinate Reference System (crs = 'epsg:4326'). When you create the geodataframe for the shop coordinates you don't. This is where the distortion is coming from..

This should fix it:

shops = gpd.GeoDataFrame(
        coordinates, 
        geometry = gpd.points_from_xy(
              df.longitude, 
              df.latitude), 
              crs = "EPSG:4326" 
              )
        ) 

Cheers!

Upvotes: 1

Related Questions