MCM520 ← 资料站首页 图表选择可视化指南:地图:看空间分布(深度版) 打开交互阅读器 →

图表选择可视化指南:地图:看空间分布(深度版)

把数据叠加到地理空间,展示区域差异、选址、扩散路径等空间模式。

分类:🕸 结构图 适用:区域销量/风险分布、选址问题、疫情/污染扩散

一、这个图适合谁(适用场景)

  • 区域销量/风险分布
  • 选址问题
  • 疫情/污染扩散

二、图表结构要素

  1. 底图=地理边界
  2. 颜色/符号=数值
  3. 可加流向线
  4. 需经纬度或区划

三、可视化的底层逻辑

地图把数据叠加到真实地理空间,揭示空间模式——聚集、梯度、异常、扩散路径,这些是纯表格或普通柱状图无法表达的维度。它用的是"地理位置"这一天然有序通道,读者对"哪块区域高、沿什么方向变化"有本能的空间直觉。但地图的陷阱在于"空间语义丢失":一旦缺比例尺、图例、指北针,或用了无顺序的彩虹配色,读者就无法判断"深色是数值高还是只是底图花"。此外,行政区划的面积≠数据量,大区域天然视觉主导,易造成"大省一定更重要"的误读。核心思想:有真实地理维度才用地图,且配色必须有序(顺序/发散),空间语义要素(比例尺/图例)缺一不可。

四、视觉编码与感知推导

分级着色(choropleth):区域 rr 的值 vrv_r 经映射上色。两种分级:

  • 等量分级(quantile):每级含相同数量区域,分布均匀但同级数值跨度可能大;
  • 等距分级(equal interval):按数值等宽,受离群值影响(多数区域挤在一两级)。

选错分级会扭曲模式感知。

配色顺序性:颜色 c(v)c(v) 必须单调对应 vv(顺序色阶由浅入深,或发散色阶以某基准为中心),避免彩虹——否则"深红 vs 深蓝"被误读为类别差异而非数值高低。

面积-数值失真与校正:choropleth 中区域面积 ArA_r(地理)与数据 vrv_r 无关,大区域视觉权重过高。用Cartogram(面积∝数值)可校正:把地图形状扭曲使每块面积正比于 vrv_r,消除"大即重要"错觉。

空间自相关(Moran's I):量化聚集程度

I=n∑i∑jwij⋅∑i∑jwij(vi−vˉ)(vj−vˉ)∑i(vi−vˉ)2 I=\frac{n}{\sum_i\sum_j w_{ij}}\cdot\frac{\sum_i\sum_j w_{ij}(v_i-\bar v)(v_j-\bar v)}{\sum_i(v_i-\bar v)^2}

I>0I>0 表正聚集(相邻区域值相近),I<0I<0 表离散;用于判断"空间模式是否显著"而非仅肉眼觉得"有聚集"。

五、怎么画(步骤)

  1. 确认有地理维度(经纬度/行政区)。
  2. 用 choropleth(面着色)表达区域数值。
  3. 用气泡/符号大小编码点状量。
  4. 配色注意顺序感(浅→深)。
  5. 指北针+比例尺+图例不可少。

六、何时用 / 何时不用 / 常见丑图

  • 何时用:『在哪、空间上怎么分布』。
  • 何时不用:无空间维度 → 用其它图。
  • 常见丑图:无比例尺、配色无顺序、底图过花。

七、常见坑

  • 缺比例尺/图例
  • 配色无顺序误导
  • 底图抢戏

八、画图自检清单

  • 有地理维度
  • 配色有序
  • 比例尺/图例完整
  • 重点区域突出

九、配套资源与搭配

  • 网络/图结构问题怎么选
  • 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()

运行效果图

图X9  城市应急站空间选址地图


本指南由 MCM520 资料站生成,配套 Python 代码可直接运行。