You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置地理绘图中图例标记的边缘颜色?

问题:如何给GeoPandas点地图的图例标记添加黑色边缘?

我正在绘制带有点要素的地图,希望图例中的标记带有黑色边缘。已在绘图代码的legend_kwds中设置了edgecolor参数,但未达到预期效果,请问该如何配置?

我的代码如下:

import geopandas as gpd
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import matplotlib.pyplot as plt

# 创建一个包含经纬度坐标的GeoDataFrame
df = df_unique
gdf = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy(df['modern_longitude'], df['modern_latitude']),crs='EPSG:4326')

#创建投影对象
robinson = ccrs.Robinson()

# 将 GeoDataFrame 投影到 Robinson 投影坐标系下
gdf_robinson = gdf.to_crs(ccrs.Robinson().proj4_init)

# 读取地图数据
map_path = "110m_physical/ne_110m_land.shp"
world = gpd.read_file(map_path)
world=world.to_crs(ccrs.Robinson().proj4_init)

# 创建绘图对象
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(1, 1, 1, projection=robinson)
ax2 = ax

# 添加数据
world.plot(ax=ax2, color='lightgray', edgecolor='black')
gdf_robinson.plot(ax=ax, legend=True, legend_kwds = {"loc":'center left', "bbox_to_anchor": (1.1, 0.5),"title":"proxy"},column='proxy',cmap='tab20', markersize=50,edgecolor='black')

# ax.set_axis_off()
plt.show()

解决方案

GeoPandas的plot方法中,legend_kwds参数里的edgecolor不会直接作用于图例标记,因为图例的可视化元素是独立生成的。需要在绘图完成后,手动获取图例对象并修改每个标记的边缘颜色。

修改后的代码如下:

import geopandas as gpd
import cartopy.crs as ccrs
import matplotlib.pyplot as plt

# 创建GeoDataFrame
df = df_unique
gdf = gpd.GeoDataFrame(df, geometry=gpd.points_from_xy(df['modern_longitude'], df['modern_latitude']),crs='EPSG:4326')

# 投影转换
robinson = ccrs.Robinson()
gdf_robinson = gdf.to_crs(robinson.proj4_init)

# 读取地图数据
map_path = "110m_physical/ne_110m_land.shp"
world = gpd.read_file(map_path).to_crs(robinson.proj4_init)

# 创建绘图对象
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(1, 1, 1, projection=robinson)

# 绘制底图和点数据
world.plot(ax=ax, color='lightgray', edgecolor='black')
# 绘图时捕获图例对象
plot_result = gdf_robinson.plot(ax=ax, legend=True, 
                                legend_kwds={"loc":'center left', "bbox_to_anchor": (1.1, 0.5),"title":"proxy"},
                                column='proxy',cmap='tab20', markersize=50,edgecolor='black')

# 获取图例并修改标记边缘颜色
legend = plot_result.get_legend()
for handle in legend.legendHandles:
    handle.set_edgecolor('black')
    # 可选:调整边缘线宽,让黑色边缘更明显
    handle.set_linewidth(1.5)

# ax.set_axis_off()
plt.show()

关键修改说明

  1. 捕获gdf_robinson.plot()的返回值,通过该对象获取图例
  2. 遍历图例的每个legendHandle,调用set_edgecolor()设置黑色边缘
  3. 可选添加set_linewidth()调整边缘线宽,提升视觉效果

内容的提问来源于stack exchange,提问作者keweizhou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 09:40:55