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地图加卫星底图》——让你的地图从“学术报告”秒变“谷歌地球”。
-
SHP数据清洗太耗时?GeoPandas批量处理实战(附:完整脚本) 2026-04-11 08:30:02
-
GeoPandas怎么读?GIS空间分析实战(附:源码) 2026-04-11 08:30:02
-
GIS开发工程师招聘简章怎么写?大厂JD全攻略(附:通用模板) 2026-04-11 08:30:01
-
GIS开发是做什么的?五大核心就业方向盘点(含:薪资表) 2026-04-11 08:30:01
-
GIS开发工程师是干什么的?职业前景深度解析(附:技能图谱) 2026-04-11 08:30:01
-
GIS开发竞赛代码怎么写?历年获奖源码深度解析(附:下载地址) 2026-04-11 08:30:01
-
GIS开发属于前端吗?WebGIS核心技能全解析(附:学习路线) 2026-04-11 08:30:01
-
GIS开发工程师招聘考什么?大厂面试高频真题汇总(附:答案) 2026-04-11 08:30:01
-
GIS开发用什么编程语言?首选这3门(附:全栈学习路线) 2026-04-11 08:30:01
-
GeoPandas安装总报错?GIS大神教你避坑(附:懒人包) 2026-04-11 08:30:01
-
空间分析图怎么画?GIS可视化实战教程(含:配色模板) 2026-04-10 08:30:02
-
空间分析是什么?GIS核心功能实操详解(附:练习数据) 2026-04-10 08:30:02
-
零基础怎么学GIS开发?2025年高效学习路径(含:资料包) 2026-04-10 08:30:02
-
GIS开发工程师薪资有多高?大厂晋升与面试全攻略(含:真题) 2026-04-10 08:30:02
-
GIS开发需要学哪些?新手必看技能清单(含:避坑指南) 2026-04-10 08:30:02
-
空间分析图怎么做才好看?ArcGIS制图全流程(含:配色方案) 2026-04-10 08:30:01
-
GIS空间分析与建模怎么学?ArcGIS实战教程(含:数据包) 2026-04-10 08:30:01
-
空间分析包括哪些内容?GIS高阶技能盘点(含:思维导图) 2026-04-10 08:30:01
-
GIS空间分析法怎么用?ArcGIS选址实战详解(附:练习数据) 2026-04-10 08:30:01
-
GIS空间分析怎么做?ArcGIS实战操作全流程(附:练习数据) 2026-04-10 08:30:01