GeoPandas绘图太丑?Matplotlib咋调?
GeoPandas绘图太丑?别急,Matplotlib调色盘给你“美颜滤镜”
你是不是也遇到过这种情况:辛辛苦苦用GeoPandas加载了行政区划数据,调用plot()一键出图,结果出来的地图灰扑扑、配色像90年代网页,连自己都不想多看第二眼?别慌——这不是你的数据有问题,而是默认样式在偷懒。今天我就手把手教你,用Matplotlib给GeoPandas地图“整容”,从土味村姑秒变高级杂志封面。

为什么GeoPandas默认图这么“素”?
GeoPandas底层依赖Matplotlib绘图,但为了“通用性”,它默认采用最保守的灰色系+单一线条。这就像你去照相馆拍证件照,摄影师不会主动给你加柔光、换背景——不是他不会,是他默认“安全模式”。我在参与某省国土空间规划项目时,第一次用GeoPandas画耕地分布图,领导看了一眼说:“这图放汇报PPT里,怕是要被当成实习生做的。”
记住:GeoPandas负责“画出来”,Matplotlib负责“画得美”。两者是“骨架”和“皮肤”的关系。
三步走:从“能看”到“耐看”的实战改造
我们以中国省级行政区为例,演示如何一步步美化。假设你已加载好数据china_gdf(含geometry列):
import geopandas as gpd
import matplotlib.pyplot as plt
# 读取数据(示例路径)
china_gdf = gpd.read_file('path/to/china_provinces.geojson')
第一步:告别灰白,上色!—— cmap参数是灵魂
默认灰色是因为没指定颜色映射(colormap)。Matplotlib内置几十种科学配色方案,比如'viridis'(渐变紫绿)、'plasma'(科幻感橙紫)、'Set3'(柔和马卡龙)。试试这个:
fig, ax = plt.subplots(1, 1, figsize=(12, 8))
china_gdf.plot(column='area', cmap='viridis', legend=True, ax=ax)
plt.title('中国各省面积分布图', fontsize=16)
plt.show()
这里column='area'表示按面积大小上色,cmap='viridis'指定配色方案。瞬间是不是高级感拉满?
第二步:边界描边——让省份“轮廓分明”
默认边界线太细或颜色太淡,导致省份糊成一团。解决方案:用edgecolor和linewidth强化边界:
china_gdf.plot(
column='area',
cmap='viridis',
edgecolor='white', # 白色描边
linewidth=0.5, # 线宽0.5
legend=True,
ax=ax
)
白色描边在深色底图上尤其提神,就像给每块拼图加了金边框。
第三步:字体、图例、背景——细节决定成败
专业地图的魔鬼在细节。中文字体乱码?图例太小?背景太刺眼?一并解决:
# 设置中文字体(避免方框)
plt.rcParams['font.sans-serif'] = ['SimHei'] # Windows用黑体
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
# 调整图例位置和字体
china_gdf.plot(
column='area',
cmap='viridis',
edgecolor='white',
linewidth=0.5,
legend=True,
legend_kwds={'label': "面积 (平方公里)", 'orientation': "horizontal"},
ax=ax
)
# 设置背景色和标题
ax.set_facecolor('#f0f0f0') # 浅灰背景
ax.set_title('中国各省面积分布图', fontsize=18, fontweight='bold')
ax.axis('off') # 隐藏坐标轴
plt.tight_layout() # 自动调整边距
plt.show()
进阶技巧:自定义配色与多图布局
如果内置cmap不满足你?可以自定义颜色列表。比如按经济带分色:
# 假设有'经济带'列:东部/中部/西部
region_colors = {
'东部': '#ff6b6b',
'中部': '#4ecdc4',
'西部': '#45b7d1'
}
china_gdf['color'] = china_gdf['经济带'].map(region_colors)
china_gdf.plot(color=china_gdf['color'], edgecolor='black', linewidth=0.3, ax=ax)
想画子图对比不同指标?用subplot网格布局:
fig, axes = plt.subplots(1, 2, figsize=(15, 6))
china_gdf.plot(column='GDP', cmap='Reds', ax=axes[0], title='GDP分布')
china_gdf.plot(column='人口', cmap='Blues', ax=axes[1], title='人口分布')
plt.tight_layout()
plt.show()
总结:丑图不是终点,而是调参的起点
GeoPandas + Matplotlib 的组合,本质是“数据驱动绘图引擎”。默认图丑,恰恰给了你无限定制空间。记住三个核心参数:cmap(配色)、edgecolor/linewidth(描边)、legend_kwds(图例)。再配合字体、背景、布局微调,你也能做出期刊级专题地图。
Dr.Gis 小贴士:别在配色上花超过10分钟。推荐先用'viridis'或'plasma'这类科学友好的cmap,它们对色盲友好且层次分明,比你自己瞎配更专业。
你在调图时踩过哪些坑?或者有什么私藏的配色方案?欢迎在评论区晒图交流!下期我们讲《如何用Contextily给GeoPandas地图加卫星底图》——让你的地图从“学术报告”秒变“谷歌地球”。
-
GIS坐标系总是搞混?各行业投影选择与WGS84、CGCS2000转换实战技巧(含:对照表) 2026-01-14 08:30:02
-
GIS坐标系位置总对不上?三步搞定数据偏移修正(附:参数对照表) 2026-01-14 08:30:02
-
GIS坐标系6位转8位总出错?核心算法与精度提升技巧详解(附:参数对照表) 2026-01-14 08:30:02
-
GIS坐标系转换为何总出错?常见误区排查与修正方案(附:对照表) 2026-01-13 08:30:02
-
GIS坐标系转换总出错?核心参数与校正流程详解(附:参数表) 2026-01-13 08:30:02
-
GIS坐标系怎么设置?从定义到投影转换的实战指南(附:参数对照表) 2026-01-13 08:30:02
-
GIS坐标系到底用哪个?盘点国内主流坐标系及转换技巧(附:参数表) 2026-01-13 08:30:02
-
GIS坐标系转换工具怎么选?高精度投影转换实战技巧(附:对照表) 2026-01-13 08:30:02
-
GIS坐标系到底怎么选?一文搞懂投影与转换(含:常用参数表) 2026-01-13 08:30:02
-
GIS坐标系与投影傻傻分不清?GIS中地理坐标系转投影坐标系实战指南(含:常用投影参数表) 2026-01-13 08:30:01
-
GIS坐标系与投影总是报错?ArcGIS坐标定义与转换参数详解(附:对照表) 2026-01-13 08:30:01
-
GIS坐标系与投影总报错?地理坐标系和投影坐标系的核心区别(含:转换公式) 2026-01-13 08:30:01
-
WGS84坐标系转换CGCS2000总出错?原理剖析与实战转换步骤(附:常用GIS软件参数表) 2026-01-13 08:30:01
-
GIS投影后坐标没变化?定义坐标系与投影工具使用误区详解(附:对照表) 2026-01-12 08:30:02
-
GIS投影总报错?WGS84转CGCS2000实战步骤与参数详解(附:坐标系对照表) 2026-01-12 08:30:02
-
GIS投影坐标总是偏移?一分钟搞定坐标系定义与转换(附:高精度参数表) 2026-01-12 08:30:02
-
GIS坐标系与投影总出错?盘点常见投影变形问题与修正方案(附:WGS84与CGCS2000转换参数表) 2026-01-12 08:30:02
-
GIS坐标系统与投影转换必学!(含:坐标系定义与投影作用详解) 2026-01-12 08:30:02
-
GIS坐标系与投影转换总出错?排查思路与常用坐标系对照表(附:EPSG代码) 2026-01-12 08:30:02
-
GIS坐标系与投影到底怎么选?常见误区盘点与选型指南(附:对照表) 2026-01-12 08:30:02