У меня есть карта Чили (http://labgeo.ufro.cl/fichas/chile_geo/ficha_cl_geo.html первая ссылка, на которой написано «Континентальный Чили»), и я хотел бы построить ее и добавить несколько точек центров, для которых у меня есть данные широты и долготы.
Я новичок с геопандами и matplotlib, но мне удалось построить карту с центрами в виде точек разных цветов, используя предложенный ответ для matplotlib из этого поста: Цвет по значениям столбцов в Matplotlib
Вот мой код:
#Loading data, since I am making the coordinates up they won´t fit the map nicely but you will get the idea
map_= gpd.read_file("cl_continental_geo.shp")
geo_df_ = pd.DataFrame({"id":np.random.randint(20, size=133) ,"Latitude": np.random.normal(-34.406922,7.819504, 133), "Longitud": np.random.normal(-71.243350,1.254126, 133)})
geometry =[Point(xy) for xy in zip( geo_df_["Longitud"],geo_df_["Latitude"])]
geo_df_ =gpd.GeoDataFrame(geo_df_, crs={"init":"epsg:4326"},geometry= geometry)
# creating color map for categories
categories = np.unique(geo_df_["id"])
colors = np.linspace(0, 1, len(categories))
colordict = dict(zip(categories, colors))
#matching it to the geopandas df
geo_df_["Color"] = geo_df_["id"].apply(lambda x: colordict[x])
#plotting
geo_df_.plot(ax=map_.plot(figsize=(40, 30)), marker='o', c =geo_df_.Color, markersize=100)
То, что я не могу сделать, пробуя разные вещи, - это появление легенды.
- Я попытался добавить легенду = True
- Я попытался сделать это сначала путем определения топора, но мне не удается правильно передать данные, чтобы создать график и ничего не получилось.
- Пробовал это решение, но мой файл shp содержит только одну строку синформация о мультиполигоне, и я не знаю, как создать предложенный скрещенный фрейм данных Создание легенды для сюжета геопанды
Пока единственное, что мне удалосьdo показывает словарь идентификаторов с номером цвета, добавляя .legend () в конце, как это: geo_df_.plot(ax=map_.plot(figsize=(40, 30)), marker='o', c =geo_df_.Color, markersize=100).legend()
. Но я получаю эту ошибку
Не найдены дескрипторы с метками для вставки в легенду.
, но когда я передаю словарь цветов в качестве аргумента, он показывает одну точку вЛегенда.
То, что я хотел бы достичь, это легенда, как это:
взяты из этого поста: КонтрольВнешний вид легенды ggplot2, не затрагивающий сюжет Моя идеальная легенда - иметь квадрат на стороне со всеми цветными точками, отождествленными с идентификатором центра, который они представляют. Например, желтая точка: (в центре) 5, фиолетовая точка: 8 и т. Д.
У меня есть только одна точка, которая показывает весь словарь следующим образом: