Невозможно покрасить точки GeoDataFrame - PullRequest
0 голосов
/ 08 марта 2020

Я хочу нанести на карту местоположения через Париж и раскрасить их по типу столбца. Я также хочу построить легенду, связанную с типами местоположения. Я могу создать GeoDataframe, нанести на карту местоположения через Париж. Однако я не могу указать цвет точек на карте. Кроме того, мне нужно создать легенду отдельно, а затем применить ее к сюжету.

Как получить цвета точек графика в соответствии со столбцами легенды?

enter image description here

код:

paris = gpd.read_file(shape_filepath)
ax = paris.plot(figsize=(40,10), linewidth=1, edgecolor='white', color='lightgrey')
ax.axis('off')
ax.set_title("Casino Banner Stores Paris", fontdict={"fontsize": "25","fontweight" : "5"})

xl = r"summary.xlsx"
df =pd.read_excel(xl,sheet_name = "paris_stores_and_metro_chart")
df = df.dropna()

#Create Points for Shape file - these are long lat pairs
geometry =[Point(xy) for xy in zip(df["lng"],df["lat"])]
crs ={'init':'espg:4326'}
#Create GeoDataFrame
stores =gpd.GeoDataFrame(df,crs=crs,geometry=geometry)
stores.plot(ax=ax,figsize=(40,10), column=stores['colour'], cmap=None)


legend_elements =     [  
                        Line2D([0],[0], markerfacecolor ='#0000ff',marker='o', color='w',label ='casino'),
                        Line2D([0],[0], markerfacecolor ='#3366ff',marker='o', color='w', label ='fanrpix'),
                        Line2D([0],[0], markerfacecolor ='#00e6b8',marker='o',  color='w',label ='geant'),
                        Line2D([0],[0], markerfacecolor ='#e6e600',marker='o', color='w', label ='leader price'),
                        Line2D([0],[0], markerfacecolor ='#e65c00',marker='o', color='w', label ='metro station'),
                        Line2D([0],[0], markerfacecolor ='#ff00ff',marker='o', color='w', label ='monoprix'),
                        Line2D([0],[0], markerfacecolor ='#e60000',marker='o', color='w', label ='naturalia')
                    ]


ax.legend(handles=legend_elements, fontsize =20)

enter image description here

1 Ответ

0 голосов
/ 09 марта 2020

В идеале вы должны использовать Geo Pandas 0.6.3 или 0.7.0. Тогда вы сможете передавать столбец colour в ключевое слово color во время построения графика, а geo pandas должен сопоставлять цвета, назначенные каждой строке, с ее геометрией. См. Следующий фрагмент, иллюстрирующий поведение:

import geopandas as gpd
from shapely.geometry import Point

g = [Point(0, 0), Point(1, 0), Point(1,1), Point(0.5, .5)]
gdf = gpd.GeoDataFrame(geometry=g)
gdf['colour'] = ['#0000ff', 'r', '#0000ff', 'k']
gdf.plot(color=gdf.colour)

resulting plot

В вашем случае это должно сработать:

stores.plot(ax=ax, figsize=(40,10), color=stores['colour'])

Если это не так, то вы либо используете старую версию geo pandas, либо есть ошибка. В этом случае, пожалуйста, сообщите об этом .

...