0

So I am trying to do something which seems relatively simple but is proving incredibly difficult. I have a .csv file with addresses and their correspondent latitude/longitude, I just want to plot those on a California JSON map like this one in python:

https://github.com/deldersveld/topojson/blob/master/countries/us-states/CA-06-california-counties.json

I've tried bubble maps, scatter maps, etc. but to no luck I keep getting all kind of errors :(. This is the closest I've got, but that uses a world map and can't zoom in effectively like that json map up there. I am still learning python so please go easy on me ><

import plotly.express as px
import pandas as pd
df = pd.read_csv(r"C:\Users\FT4\Desktop\FT Imported Data\Calimapdata.csv")
fig = px.scatter_geo(df,lat='Latitude',lon='Longitude', hover_name="lic_type", scope="usa")
fig.update_layout(title = 'World map', title_x=0.5)
fig.show()

If anyone could help me with this I would appreciate it. Thank you

rinkert
  • 6,593
  • 2
  • 12
  • 31
Warren Meroney
  • 195
  • 2
  • 10
  • Plotly geodata cannot handle topojson format, so should it be converted? Or, if you prepare an alternative geojson format geodata, I think you can draw a map. – r-beginners Jul 19 '22 at 12:36

1 Answers1

2

your example link is just a GeoJSON geometry definition. Are you talking about a Choropleth?

If so, check out geopandas - you should be able to link your data to the polygons in the shape definition you linked to by reading it in with geojson and then joining on the shapes with sjoin. Once you have data tied to each geometry, you can plot with geopandas's .plot method. Check out the user guide for more info.

Something along these lines should work:

import geopandas as gpd, pandas as pd

geojson_raw_url = (
    "https://raw.githubusercontent.com/deldersveld/topojson/"
    "master/countries/us-states/CA-06-california-counties.json"
)

gdf = gpd.read_file(geojson_raw_url, engine="GeoJSON")
df = pd.read_csv(r"C:\Users\FT4\Desktop\FT Imported Data\Calimapdata.csv")

merged = gpd.sjoin(gdf, df, how='right')

# you could plot this directly with geopandas
merged.plot("lic_type")

alternatively, using @r-beginners' excellent answer to another question, we can plot with express:

fig = px.choropleth(merged, geojson=merged.geometry, locations=merged.index, color="lic_type")
fig.update_geos(fitbounds="locations", visible=False)

fig.show()
Michael Delgado
  • 13,789
  • 3
  • 29
  • 54