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地图加卫星底图》——让你的地图从“学术报告”秒变“谷歌地球”。
-
QGIS学习如何从入门到精通?新手必学的10个核心操作(附:实战数据包) 2026-03-01 08:30:02
-
QGIS学习效率低?资深站长推荐的系统方法论(附:qgis操作手册) 2026-03-01 08:30:02
-
GIS数据处理总出错?自动化脚本工具箱来了(附:批量处理代码) 2026-03-01 08:30:02
-
QGIS学习找不到方向?这份qgis使用教程附:插件推荐与实操技巧! 2026-03-01 08:30:02
-
QGIS学习中文界面不习惯?qgis中文使用手册(附:工具箱汉化对照表) 2026-03-01 08:30:02
-
QGIS二次开发为什么离不开SIP?掌握核心原理轻松搞定PyQt5接口(附:实战代码案例) 2026-03-01 08:30:02
-
QGIS学习卡壳?新手安装配置避坑指南(附:环境检测工具) 2026-03-01 08:30:02
-
滁州学院GIS技能大赛如何拿奖?获奖作品技术路径全解析(附:数据处理流程) 2026-03-01 08:30:02
-
QGIS入门如何选版本?手把手教你安装避坑(附:插件清单) 2026-03-01 08:30:02
-
QGIS学习遇到坐标转换难题?连环追问数据投影与地理配准(附:参数对照表) 2026-03-01 08:30:02
-
GIS技能大赛第九届上午数据如何处理?附:GIS研习社实战复盘与代码包! 2026-02-28 08:30:02
-
GIS培训最出名的三个机构是哪几家?资深GISer亲测推荐(附:课程对比与避坑指南) 2026-02-28 08:30:02
-
GIS技能应用大赛如何突围?获奖作品核心思路与实操技巧(附:数据处理清单) 2026-02-28 08:30:02
-
GIS技能大赛第十一届下午场考什么?备赛真题解析与技巧(附:获奖作品复盘) 2026-02-28 08:30:02
-
备战GIS技能大赛安徽省,如何高效提升空间分析能力?(含:获奖作品复盘) 2026-02-28 08:30:02
-
GIS技能是什么?从入门到精通必须掌握的5大核心能力(附:学习路线图) 2026-02-28 08:30:02
-
第九届GIS技能大赛上午操作卡壳?GIS研习社复盘核心考点!(附:答题思路) 2026-02-28 08:30:02
-
QGIS学习入门操作繁琐?qgis教程基础篇附三种数据处理技巧! 2026-02-28 08:30:02
-
全国gis技能应用大赛如何突围?备赛攻略(附:获奖作品分析) 2026-02-28 08:30:02
-
GIS技能证书怎么考?2025年值得考的GIS证书盘点(附:含金量分析) 2026-02-28 08:30:02