首页 GIS基础理论 GeoPandas绘图太丑?Matplotlib咋调?

GeoPandas绘图太丑?Matplotlib咋调?

作者: GIS研习社 更新时间:2025-12-19 10:00:56 分类:GIS基础理论

GeoPandas绘图太丑?别急,Matplotlib调色盘给你“美颜滤镜”

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

GeoPandas绘图太丑?Matplotlib咋调?

为什么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'指定配色方案。瞬间是不是高级感拉满?

第二步:边界描边——让省份“轮廓分明”

默认边界线太细或颜色太淡,导致省份糊成一团。解决方案:用edgecolorlinewidth强化边界:

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地图加卫星底图》——让你的地图从“学术报告”秒变“谷歌地球”。

相关文章