无法在具有上下文背景地图的GeoPandas地图上对点进行颜色编码

2024-04-28 22:59:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个地图,其中的点按类别进行颜色编码-但是,当我按类别进行颜色编码时,索引将包含在类别中,因此每个点都是自己的颜色。下面是一些示例代码来重现我的问题。你知道吗

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
from matplotlib import cm
import geopandas as gpd
from shapely.geometry import Point
import contextily as ctx

list = [[39.17413494, -84.36475604, 'BK'],
 [38.96151336, -84.55732482, 'McDonalds'],
 [38.95100498, -84.55013050000001, 'McDonalds'],
 [38.96186501, -84.55717946, 'McDonalds'],
 [39.00969774, -84.50139703, 'Subway'],
 [39.09614656, -84.56445953, 'Pizza Hut'],
 [38.98661028, -84.39965444, 'Popeyes'],
 [39.34727542, -84.66033389, 'Arbys'],
 [39.09854089, -84.55881323, 'Wendys'],
 [39.0985409, -84.55881323, 'Subway'],
 [38.98693673, -84.39936496, 'Starbucks'],
 [39.17663372, -84.66664250000001, 'ChickFilA'],
 [39.19368097, -84.67709306, 'Subway'],
 [39.202496000000004, -84.5474509, 'Starbucks'],
 [39.202496000000004, -84.5474509, 'Starbucks'],
 [39.05680444, -84.32690772, 'BK'],
 [39.049786100000006, -84.39536650000001, 'McDonalds'],
 [39.049786100000006, -84.39536650000001, 'McDonalds'],
 [39.049786100000006, -84.39536650000001, 'McDonalds'],
 [39.049786100000006, -84.39536650000001, 'Subway'],
 [39.049786100000006, -84.39536650000001, 'Pizza Hut'],
 [39.04982251, -84.39533805, 'Popeyes'],
 [39.04982249, -84.39533811, 'Arbys'],
 [39.04982581, -84.39533835, 'Wendys'],
 [39.04982419, -84.39533558, 'Subway'],
 [39.04982533, -84.39534599, 'Starbucks'],
 [39.04982604, -84.39534769, 'ChickFilA'],
 [39.356410100000005, -84.361086, 'Subway'],
 [39.18283407, -84.38227921, 'Starbucks'],
 [39.43731072, -84.26926351, 'Starbucks']]
data = pd.DataFrame(list, columns =['Lat', 'Long', 'Type']) 

geometry = [Point(xy) for xy in zip(data['Long'], data['Lat'])]
crs = {'init':'epsg:4326'}
gdf = gpd.GeoDataFrame(data, crs=crs, geometry=geometry)

cmap = plt.cm.get_cmap('Dark2', 9)

gdf = gdf.to_crs(epsg=3857)
ax = gdf.plot(c=gdf.Type, cmap=cmap, label=gdf.Type, figsize=(10,10), alpha=.5)
ctx.add_basemap(ax, url=ctx.providers.Stamen.TonerLite)
ax.set_axis_off()
ax.legend(loc='center left', bbox_to_anchor=(1, 0.5))

其结果如下所示:

enter image description here

正如您所看到的,每个“麦当劳”都有自己的颜色,图例列出了每个数据点。你知道吗


Tags: importdatamatplotlib颜色asax类别cmap
1条回答
网友
1楼 · 发布于 2024-04-28 22:59:37

您使用的绘图属性不正确。Geopandas(至少在最近的版本中)需要column而不是c。你知道吗

ax = gdf.plot(column=gdf.Type, cmap=cmap, label=gdf.Type, figsize=(10,10), alpha=.5)

这似乎管用。但是你应该意识到你有多个重叠点,所以看起来并不总是一样的。你知道吗

编辑:要获得正确的图例,您需要使用Geopandas绘制图例,并将图例传递给Geopandas plot

ax = gdf.plot(column=gdf.Type, cmap=cmap, label=gdf.Type,
              figsize=(10,10), alpha=.5, legend=True,
              legend_kwds={'loc': 'center left', 'bbox_to_anchor': (1, 0.5)})
ctx.add_basemap(ax, url=ctx.providers.Stamen.TonerLite)
ax.set_axis_off()

相关问题 更多 >