图表选择可视化指南:地图:看空间分布(深度版)
把数据叠加到地理空间,展示区域差异、选址、扩散路径等空间模式。
分类:🕸 结构图 适用:区域销量/风险分布、选址问题、疫情/污染扩散
一、这个图适合谁(适用场景)
- 区域销量/风险分布
- 选址问题
- 疫情/污染扩散
二、图表结构要素
- 底图=地理边界
- 颜色/符号=数值
- 可加流向线
- 需经纬度或区划
三、可视化的底层逻辑
地图把数据叠加到真实地理空间,揭示空间模式——聚集、梯度、异常、扩散路径,这些是纯表格或普通柱状图无法表达的维度。它用的是"地理位置"这一天然有序通道,读者对"哪块区域高、沿什么方向变化"有本能的空间直觉。但地图的陷阱在于"空间语义丢失":一旦缺比例尺、图例、指北针,或用了无顺序的彩虹配色,读者就无法判断"深色是数值高还是只是底图花"。此外,行政区划的面积≠数据量,大区域天然视觉主导,易造成"大省一定更重要"的误读。核心思想:有真实地理维度才用地图,且配色必须有序(顺序/发散),空间语义要素(比例尺/图例)缺一不可。
四、视觉编码与感知推导
分级着色(choropleth):区域 的值 经映射上色。两种分级:
- 等量分级(quantile):每级含相同数量区域,分布均匀但同级数值跨度可能大;
- 等距分级(equal interval):按数值等宽,受离群值影响(多数区域挤在一两级)。
选错分级会扭曲模式感知。
配色顺序性:颜色 必须单调对应 (顺序色阶由浅入深,或发散色阶以某基准为中心),避免彩虹——否则"深红 vs 深蓝"被误读为类别差异而非数值高低。
面积-数值失真与校正:choropleth 中区域面积 (地理)与数据 无关,大区域视觉权重过高。用Cartogram(面积∝数值)可校正:把地图形状扭曲使每块面积正比于 ,消除"大即重要"错觉。
空间自相关(Moran's I):量化聚集程度
表正聚集(相邻区域值相近), 表离散;用于判断"空间模式是否显著"而非仅肉眼觉得"有聚集"。
五、怎么画(步骤)
- 确认有地理维度(经纬度/行政区)。
- 用 choropleth(面着色)表达区域数值。
- 用气泡/符号大小编码点状量。
- 配色注意顺序感(浅→深)。
- 指北针+比例尺+图例不可少。
六、何时用 / 何时不用 / 常见丑图
- 何时用:『在哪、空间上怎么分布』。
- 何时不用:无空间维度 → 用其它图。
- 常见丑图:无比例尺、配色无顺序、底图过花。
七、常见坑
- 缺比例尺/图例
- 配色无顺序误导
- 底图抢戏
八、画图自检清单
- 有地理维度
- 配色有序
- 比例尺/图例完整
- 重点区域突出
九、配套资源与搭配
- 网络/图结构问题怎么选
- Python 数据可视化模板
- 图表选择可视化指南
本指南由 MCM520 资料站自动生成(深度版),配套论文图表规范与可视化模板可在资源页下载。
十、实战案例——Python 绘制 + 图效果
当地图上有空间分布数据时,用地图展示最直观。
案例场景:某城市需要在 4 个候选位置建设应急站,每个灰点代表一个居民区需求点。
通过地图叠加需求点与候选站,可以直观判断选址是否覆盖了主要需求区域。
完整代码(Python + matplotlib)
import matplotlib.pyplot as plt
import numpy as np
np.random.seed(2026)
demand_x = np.random.uniform(10, 90, 40)
demand_y = np.random.uniform(10, 90, 40)
stations = {'站1': (25, 40), '站2': (50, 25), '站3': (75, 60), '站4': (40, 65)}
plt.figure(figsize=(7, 5))
plt.scatter(demand_x, demand_y, c='gray', s=20, alpha=0.5, label='居民区')
for name, (x, y) in stations.items():
plt.scatter(x, y, s=150, c=['#f59e0b', '#2563eb', '#16a34a', '#7c3aed'],
edgecolors='white', linewidth=2, zorder=5)
plt.text(x, y - 4, name, ha='center', va='top', fontsize=11, fontweight='bold')
plt.xlabel('经度', fontsize=12)
plt.ylabel('纬度', fontsize=12)
plt.title('城市应急站空间选址', fontsize=14, fontweight='bold')
plt.legend(fontsize=11)
plt.grid(alpha=0.3)
plt.tight_layout()
plt.show()
运行效果图
本指南由 MCM520 资料站生成,配套 Python 代码可直接运行。