地理特征类相关可视化图像总结
目录
一、蜂窝热力地图(Hexagonal Heatmap)
1.定义
2.特点
3.变体
4.优缺点
5.应用场景
6.使用Python实现
二、变形地图
1.定义
2.特点
3.变体
4.优缺点
5.应用场景
6.使用Python实现
三、气泡地图
1.定义
2.特点
3.变体
4.优缺点
5.应用场景
6.使用Python实现
四、关联地图(Associative Map)
1.定义
2.特点
3.变体
4.优缺点
5.应用场景
6.使用Python实现
五、等值线图(Isoline Chart)
1.定义
2.特点
3.变体
4.优缺点
5.应用场景
6.使用Python实现
六、点密度图(Dot Density Map)
1.定义
2.特点
3.变体
4.优缺点
5.应用场景
6.使用Python实现
七、流场图(Flow Field Diagram)
1.定义
2.特点
3.变体
4.优缺点
5.应用场景
6.使用Python实现
八、总结
一、蜂窝热力地图(Hexagonal Heatmap)
1.定义
蜂窝热力地图(又称六边形热力图)是一种基于地理空间分布的数据可视化方法,通过将地理区域划分为规则排列的六边形网格(蜂窝单元),利用颜色深浅或透明度表示每个网格内数据密度(如人口数量、事件频率、流量强度等)。相较于传统热力地图(基于像素或不规则区域),六边形网格具有无缝拼接、各向同性(每个单元与周边 6 个单元等距)、视觉平衡性强的特点,更适合展示离散点数据的空间分布模式。
2.特点
-
结构特性:六边形网格覆盖整个地理区域,无重叠或空隙,便于定量分析每个单元的数据密度。每个六边形单元可独立映射颜色(如渐变色),直观反映数据高低差异。
-
视觉优势:减少重叠遮挡,适用于高密度数据点(如城市 POI、交通轨迹),避免传统点地图的 “打点重叠” 问题。凸显空间趋势,通过颜色块的分布,可快速识别数据热点区域(如商业中心、人口密集区)及空间聚集模式。
-
数据兼容性:支持点数据(如经纬度坐标)或区域聚合数据(如各行政区统计值)。
3.变体
-
基础蜂窝热力图:单一颜色渐变表示数据密度,适用于单变量分析(如某城市餐饮店铺分布密度)。
-
分层蜂窝热力图:叠加多层数据(如不同时间段或不同类别数据),通过透明度或颜色区分层次(如白天 / 夜晚的人流对比)。
-
三维蜂窝热力图:为六边形添加高度维度(Z 轴),通过立体柱体高度直观展示数据大小,增强空间感知(需结合地图投影处理)。
-
动态蜂窝热力图:引入时间维度,通过动画展示数据随时间的变化(如台风路径影响下的降水强度动态分布)。
4.优缺点
优点 | 缺点 |
---|---|
1. 六边形网格视觉均衡,符合人类视觉习惯,便于模式识别。 2. 有效处理高密度数据,避免点重叠干扰。 3. 支持灵活的颜色编码和数据聚合(如平均值、总和)。 | 1. 数据需转换为网格单元的聚合值,可能损失原始点细节。 2. 网格大小影响分析粒度:网格过大可能掩盖局部特征,过小可能导致噪声。 3. 复杂地理边界(如岛屿、不规则行政区)的网格适配需额外处理。 |
5.应用场景
-
城市规划与交通管理:分析人口密度、交通流量热点,优化公共设施(如地铁站、消防站)布局。案例:用蜂窝热力图展示某城市早高峰时段的网约车订单密度,识别拥堵区域。
-
商业分析与市场研究:可视化客户分布、店铺覆盖范围,辅助选址决策(如快餐品牌在不同区域的消费者集中度)。
-
环境与灾害监测:展示污染物浓度(如 PM2.5)、地震震级分布或台风风速梯度,辅助应急响应。
-
社交与移动数据:分析社交媒体签到、手机信令数据的空间分布,揭示人群活动规律(如旅游景区的游客热力分布)。
6.使用Python实现
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd# ----------------------
# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置黑体
plt.rcParams['axes.unicode_minus'] = False # 显示负号
# ----------------------# 生成模拟数据(经度、纬度、数值)
np.random.seed(42)
data = pd.DataFrame({'longitude': np.random.uniform(116.2, 116.5, 500), # 模拟北京经度范围'latitude': np.random.uniform(39.8, 40.0, 500), # 模拟北京纬度范围'value': np.random.randint(1, 100, 500)
})# 绘制六边形热力图
plt.figure(figsize=(10, 8))
hexbin = plt.hexbin(x=data['longitude'],y=data['latitude'],C=data['value'], # 数值用于颜色映射gridsize=20, # 网格数量(越大网格越小)cmap='viridis', # 颜色方案edgecolor='white', # 六边形边框颜色linewidth=0.5
)
plt.colorbar(hexbin, label='数值总和')
plt.title('蜂窝热力图(matplotlib.hexbin)')
plt.xlabel('经度')
plt.ylabel('纬度')
plt.axis('equal') # 保持经纬度比例一致
plt.show()
注!:
- 经度:模拟北京中心城区范围(约 116.2°E ~ 116.5°E)。
- 纬度:模拟北京中心城区范围(约 39.8°N ~ 40.0°N)。
- 数值:随机整数(1~100),可代表人口密度、商业活跃度等指标。
上述是一张蜂窝热力图,使用 matplotlib
库的 hexbin
函数绘制 。蜂窝热力图属于数据可视化的一种形式,通过六边形网格展示数据的空间分布情况。图中每个六边形代表一个区域,颜色表示该区域内数据的数值总和,颜色越偏向黄色代表数值总和越大,越偏向紫色代表数值总和越小 。其横坐标为经度,纵坐标为纬度,展示了特定地理区域内的数据分布特征
二、变形地图(Cartogram)
1.定义
变形地图(Cartogram)是一种特殊的地图可视化工具,它通过扭曲地理区域的形状或大小,来表示某种统计数据。与传统地图不同,变形地图中地理区域的大小和形状并非依据实际地理面积和形状,而是根据特定的变量(如人口数量、GDP、资源分布等)进行缩放或变形,目的是突出某些属性的大小和分布情况。
2.特点
-
数据驱动区域变化:地理区域的大小由所表示的数据变量决定,数据值大的区域在地图上面积更大,能直观展示数据分布和相对权重。例如,展示人口数据时,人口密集地区的面积会相应增大。
-
保持地理邻接:尽管区域发生变形,但相邻区域的相对位置关系基本保持不变,保证了地理邻接关系的合理性,避免地图过度扭曲,便于理解区域间的地理位置关系。
-
重点突出:通过变形,能让使用者更容易识别数据集中的趋势和异常值,快速聚焦数据特征。
3.变体
-
连续变形地图:在尽量维持原地图形状、边界和邻域关系的基础上,使区域与数据成比例缩放。优点是地图区域真实形状、边界相对容易保留,轮廓外观较清晰;缺点是变形程度受数值分布、迭代轮数影响,难以复现,数据分布不均衡时地图失真严重,外观易被异常值扭曲,且为保留整体轮廓,内部区域可能变形到难以识别。
-
非连续变形地图:随着区域面积的缩小或增长,相邻性会受到损害,个别区域形状虽被保留,但会与整个地图分离。优点是可基于区域属性值实现较好的比例缩放;缺点是失去地理保真度,相邻区域分离,无法代表真实地理空间。
-
符号变形地图:属于非连续变形地图的延伸,由 Dorling, Daniel 提出,通过将地理区域转换成统一形状(如圆形、正方形)来增强信息易读性,常用于绘制社会经济数据。优点是能让读者将注意力从地形转移到地理属性变量上,也可作为比例符号图展示多维、多结构信息(如用饼图代替圆形基础元素展示);缺点是严重丧失地理形状保真度,图形符号间会出现较大间隙。
-
等面积变形地图:是符号变形地图的特例,将所有地理区域面积设置为统一大小,用等面积符号(如圆形、方形)表示地理区域,并维持简单邻接的拓扑关系。优点是使读者不受原区域面积干扰,专注于地理属性变量分析,不易受数据分布和异常值影响;缺点是各区域形状、面积统一,失去原地理区域面积信息。
-
网格统计地图:使用相同大小的网格形状创建映射变量。优点是均衡的网格可创造相对平等的视觉感知,克服小区域视觉感知低的问题;缺点是内部区域的边界形状、邻接拓扑关系展示不清晰。
4.优缺点
-
优点
-
数据突出:能将数据以夸张形式呈现,使重要数据特征一目了然,便于发现数据模式、趋势和异常值。
-
视觉吸引力:与传统地图相比,形式新颖独特,更能吸引观众注意力,激发兴趣。
-
多维度展示:可同时展示多个变量,帮助理解不同变量间关系。
-
-
缺点
-
信息易误读:若变形方式不当,可能扭曲地理关系,导致观众难以准确理解地理信息和数据差异,错误解读数据。
-
制作复杂:制作过程涉及数据处理、算法应用和地图绘制等多环节,需专业知识和技能,且要考虑数据准确性、地图合理性等问题。
-
缺乏地理准确性:改变地理区域形状和大小后,难以反映真实地理情况,对需要精确地理信息的应用(如导航、工程测量等)不适用。
-
5.应用场景
-
人口统计:展示不同地区人口数量、密度、年龄分布等,直观呈现人口分布格局,辅助城市规划、资源分配等决策。
-
经济分析:呈现地区 GDP、产业分布、贸易数据等,分析区域经济差异和发展趋势,助力经济规划和投资决策。
-
社会资源分配:用于显示医疗资源、教育资源、交通设施等分布,评估资源配置合理性,指导资源优化分配。
-
环境科学:展示环境污染程度、生态保护区分布、自然灾害风险等,辅助环境监测和管理。
6.使用Python实现
import geopandas as gpd
import pandas as pd # 添加pandas导入
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.colors import Normalize
from matplotlib.cm import ScalarMappable
import matplotlib.patches as mpatches
from shapely.affinity import scale
import warnings# 设置中文字体支持
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]def load_world_data():"""加载世界地图数据"""try:# 尝试加载用户指定路径的数据world = gpd.read_file(r"D:\\数据可视化\\第八章\\ne_50m_admin_0_countries\\ne_50m_admin_0_countries.shp")except:# 如果无法加载用户数据,则使用geopandas内置示例数据print("无法加载指定路径的数据,将使用内置示例数据...")world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))# 重命名列以匹配原代码if 'pop_est' in world.columns:world = world.rename(columns={'pop_est': 'POP_EST'})if 'name' in world.columns:world = world.rename(columns={'name': 'NAME'})return worlddef create_normal_map(world, column='POP_EST', cmap='coolwarm', title='世界地图(基于人口)'):"""创建普通地理地图"""fig, ax = plt.subplots(figsize=(12, 8))# 确保数据类型正确world[column] = pd.to_numeric(world[column], errors='coerce')# 绘制地图world.plot(column=column, cmap=cmap, linewidth=0.8, ax=ax,edgecolor='0.8', legend=True,legend_kwds={'label': '人口估计值', 'orientation': 'horizontal'})# 设置标题plt.title(title, fontsize=16)return fig, axdef create_cartogram(world, column='POP_EST', cmap_name='coolwarm', title='世界变形地图(基于人口)'):"""创建变形地图"""# 获取实际的颜色映射对象cmap = plt.get_cmap(cmap_name)# 确保数据类型正确world[column] = pd.to_numeric(world[column], errors='coerce')# 过滤掉NaN值valid_data = world.dropna(subset=[column])if valid_data.empty:warnings.warn(f"处理后没有有效数据,请检查{column}列是否包含数值。")return None, None# 计算面积缩放因子(使用人口的立方根以获得更好的视觉效果)min_val = valid_data[column].min()max_val = valid_data[column].max()# 添加小的偏移量避免除零错误if min_val == max_val:valid_data['scale_factor'] = 1.0else:valid_data['scale_factor'] = ((valid_data[column] - min_val) / (max_val - min_val)) ** (1 / 3)valid_data['scale_factor'] = 0.1 + 2 * valid_data['scale_factor'] # 调整缩放范围# 创建画布fig, ax = plt.subplots(figsize=(12, 8))# 设置颜色映射norm = Normalize(vmin=valid_data[column].min(), vmax=valid_data[column].max())sm = ScalarMappable(cmap=cmap, norm=norm)sm.set_array([])# 绘制变形地图for idx, row in valid_data.iterrows():try:# 获取原始几何形状geom = row['geometry']# 计算几何中心centroid = geom.centroid# 根据人口规模缩放几何形状scaled_geom = scale(geom,xfact=row['scale_factor'],yfact=row['scale_factor'],origin=centroid)# 处理MultiPolygon情况if scaled_geom.geom_type == 'MultiPolygon':for poly in scaled_geom.geoms:patch = mpatches.Polygon(np.array(poly.exterior.coords),closed=True,facecolor=cmap(norm(row[column])),edgecolor='0.8',linewidth=0.5)ax.add_patch(patch)else: # Polygonpatch = mpatches.Polygon(np.array(scaled_geom.exterior.coords),closed=True,facecolor=cmap(norm(row[column])),edgecolor='0.8',linewidth=0.5)ax.add_patch(patch)except Exception as e:warnings.warn(f"处理国家 {row.get('NAME', '未知')} 时出错: {str(e)}")# 设置坐标轴范围if not valid_data.empty:ax.set_xlim(valid_data.total_bounds[0] - 5, valid_data.total_bounds[2] + 5)ax.set_ylim(valid_data.total_bounds[1] - 5, valid_data.total_bounds[3] + 5)# 添加颜色条cbar = plt.colorbar(sm, ax=ax, orientation='horizontal', pad=0.02, shrink=0.5)cbar.set_label('人口估计值')# 设置标题plt.title(title, fontsize=16)return fig, axdef main():"""主函数:加载数据并创建普通地图和变形地图"""# 加载数据world = load_world_data()# 打印列名和数据前几行print("数据列名:")print(world.columns)print("\n数据前几行:")print(world.head())# 检测人口列名pop_column = Nonepossible_pop_columns = ['POP_EST', 'pop_est', 'POPULATION', 'population']for col in possible_pop_columns:if col in world.columns:pop_column = colbreakif pop_column is None:print("警告:未找到人口列,将尝试使用'POP_EST'")pop_column = 'POP_EST'# 创建普通地图fig1, ax1 = create_normal_map(world, column=pop_column)# 创建变形地图fig2, ax2 = create_cartogram(world, column=pop_column)# 显示地图plt.tight_layout()plt.show()if __name__ == "__main__":main()
上述代码是一个基于Python的世界人口变形地图可视化工具,主要功能是将世界各国的地理位置和人口数据以两种不同方式呈现。代码通过geopandas加载地图数据,支持从指定路径或内置示例数据加载。程序包含两个核心函数:create_normal_map生成传统地理地图,国家按真实地理位置和形状展示,颜色深浅表示人口多少,create_cartogram生成变形地图,国家面积根据人口规模进行缩放,人口越多的国家在地图上显示得越大。代码中加入了数据类型检查、错误处理和自动检测人口列名等功能,增强了程序的健壮性。运行程序后,会同时显示这两种地图,便于用户对比和直观理解全球人口分布情况。
三、气泡地图(Bubble Map)
1.定义
气泡地图是一种用于展示地理空间数据的可视化图表,通过在地图上叠加气泡(圆形符号)来呈现数据的分布特征和多维度信息。每个气泡的位置对应地理坐标(如经纬度),其大小通常表示一个数值变量(如人口数量、GDP 总量),颜色或形状可用于表示另一个变量(如类别、时间维度)。
核心要素:地理空间位置 + 数值大小 + (可选)颜色 / 形状分类。
2.特点
-
空间分布直观性:通过气泡的地理坐标位置,直接反映数据在地图上的分布特征(如热点区域、聚集趋势)
-
多维度数据整合:通常映射单一数值变量(如人口、销售额、污染浓度)。可叠加第二维度变量(如数据类别、时间、风险等级)。
-
数据密度可视化:密集气泡区域直接呈现数据高值聚集区,辅助识别空间关联(如商业中心、疾病高发带)。结合底图(如行政区划、地形),可分析数据与地理特征的相关性(如沿海城市经济优势)。
-
交互性与动态扩展:支持动态效果(如时间序列动画)或交互功能(点击弹窗、缩放联动),增强数据故事性。
3.变体
-
静态气泡地图:基础形式:固定气泡位置、大小和颜色,用于展示单一时间点数据
-
动态气泡地图:引入时间维度:通过动画或交互控件展示数据随时间变化(如气泡大小、颜色动态更新)
-
分层气泡地图:多层气泡叠加:同一区域用不同层级气泡表示不同类别数据(如不同产业产值)
-
比例符号地图:严格遵循比例尺:气泡面积与数值呈正比(如面积 = 数值 × 比例系数),避免视觉失真。
4.优缺点
优点 | 缺点 |
---|---|
1. 直观展示空间分布:通过气泡位置和大小,快速识别数据热点区域。 2. 多维度呈现:结合颜色 / 形状可展示更多变量(如不同类别数据对比)。 3. 数据密度可视化:密集气泡可反映区域数据集中度。 | 1. 重叠遮挡问题:气泡密集时易遮挡,影响数据可读性。 2. 比例尺限制:气泡大小需合理映射数值,否则可能导致视觉误判。 3. 地理细节依赖:需底图支持,复杂地图可能干扰气泡信息。 |
5.应用场景
-
商业分析:门店分布与销售额:气泡位置为门店坐标,大小为销售额,颜色为门店类型(如直营店 / 加盟店)。
-
公共卫生:疾病病例分布:气泡大小为病例数,颜色为病毒类型,辅助疫情监控与资源调配。
-
城市规划:人口密度与设施覆盖:气泡表示社区人口,底图叠加学校、医院位置,评估资源均衡性。
-
环境科学:污染物分布:气泡大小为污染物浓度,颜色为监测时间,分析污染扩散趋势。
6.使用Python实现
import folium
import os
from folium.plugins import MarkerCluster# 增加更多城市数据并保持中文编码
cities = [{"城市": "纽约", "国家": "美国", "经度": -74.0060, "纬度": 40.7128, "GDP(亿美元)": 15000, "人口(百万)": 8.6},{"城市": "东京", "国家": "日本", "经度": 139.6503, "纬度": 35.6897, "GDP(亿美元)": 16000, "人口(百万)": 13.9},{"城市": "上海", "国家": "中国", "经度": 121.4737, "纬度": 31.2304, "GDP(亿美元)": 12000, "人口(百万)": 24.8},{"城市": "伦敦", "国家": "英国", "经度": -0.1276, "纬度": 51.5072, "GDP(亿美元)": 8000, "人口(百万)": 9.0},{"城市": "迪拜", "国家": "阿联酋", "经度": 55.3088, "纬度": 25.2662, "GDP(亿美元)": 3500, "人口(百万)": 3.3},{"城市": "北京", "国家": "中国", "经度": 116.4074, "纬度": 39.9042, "GDP(亿美元)": 11000, "人口(百万)": 21.5},{"城市": "洛杉矶", "国家": "美国", "经度": -118.2437, "纬度": 34.0522, "GDP(亿美元)": 7800, "人口(百万)": 4.0},{"城市": "巴黎", "国家": "法国", "经度": 2.3522, "纬度": 48.8566, "GDP(亿美元)": 7600, "人口(百万)": 2.2},{"城市": "新加坡", "国家": "新加坡", "经度": 103.8198, "纬度": 1.3521, "GDP(亿美元)": 3600, "人口(百万)": 5.7},{"城市": "悉尼", "国家": "澳大利亚", "经度": 151.2093, "纬度": -33.8688, "GDP(亿美元)": 3300, "人口(百万)": 5.3}
]# 创建地图,以亚洲为中心
m = folium.Map(location=[30, 100], # 更偏向亚洲中心zoom_start=2,tiles='CartoDB positron', # 简洁白底地图control_scale=True # 显示比例尺
)# 创建标记聚类(中文显示)
marker_cluster = MarkerCluster(name="城市气泡").add_to(m)# 标准化GDP数值并增大气泡尺寸
max_gdp = max(city["GDP(亿美元)"] for city in cities)
min_gdp = min(city["GDP(亿美元)"] for city in cities)# 添加气泡并优化显示
for city in cities:# 增大气泡尺寸范围 [50000, 200000]normalized_size = 50000 + (city["GDP(亿美元)"] - min_gdp) / (max_gdp - min_gdp) * 150000# 确保中文正常显示的HTML弹出内容popup_html = f"""<div style="font-family: 'Microsoft YaHei', sans-serif; width: 220px;"><h4 style="margin-bottom: 5px; color: #2c3e50;">{city['城市']},{city['国家']}</h4><hr style="margin: 5px 0; border: 0; border-top: 1px solid #eee;"><p><strong>GDP:</strong> {city['GDP(亿美元)']} 亿美元</p><p><strong>人口:</strong> {city['人口(百万)']} 百万</p><p><strong>坐标:</strong> {city['纬度']:.2f}, {city['经度']:.2f}</p></div>"""# 创建气泡folium.Circle(location=[city["纬度"], city["经度"]],radius=normalized_size,color='#3186cc',fill=True,fill_color='#3186cc',fill_opacity=0.6,weight=2,popup=folium.Popup(popup_html, max_width=300),tooltip=f"{city['城市']}({city['国家']})").add_to(marker_cluster)# 添加中文地图控件
folium.LayerControl(position='topright',collapsed=False,name='图层控制'
).add_to(m)# 添加比例尺(中文单位)
folium.plugins.MeasureControl(position='bottomleft',primary_length_unit='公里',secondary_length_unit='英里',primary_area_unit='平方公里',secondary_area_unit='平方英里'
).add_to(m)# 获取当前脚本所在目录
script_dir = os.path.dirname(os.path.abspath(__file__))
output_path = os.path.join(script_dir, '气泡图.html')# 保存地图并确保中文编码
try:m.save(output_path)print(f"地图已成功保存到: {output_path}")# 尝试自动打开地图import webbrowserwebbrowser.open('file://' + output_path)
except Exception as e:print(f"保存地图时出错: {e}")print(f"请手动打开: {output_path}")
上述代码是使用 Python 的 folium 库绘制交互式气泡地图的完整实现,核心功能是在地图上通过气泡展示全球主要城市的 GDP 和人口数据。代码首先定义了包含城市名称、国家、经纬度、GDP 及人口信息的列表数据,直接嵌入代码避免依赖外部文件。接着创建以亚洲为中心的地图,采用简洁的 CartoDB positron 底图并显示比例尺,便于观察亚洲城市分布。通过 MarkerCluster 插件实现标记聚类,避免气泡密集时重叠遮挡。在气泡尺寸处理上,先计算 GDP 的最大值和最小值,通过归一化算法将气泡大小映射到 [50000, 200000] 范围,确保不同城市 GDP 差异在视觉上合理呈现。弹出框使用 HTML 自定义样式,指定微软雅黑字体确保中文正常显示,包含城市名、国家、GDP、人口和坐标信息,提升交互体验。地图控件如图层控制和测量工具均设置为中文,测量工具支持公里 / 英里、平方公里 / 平方英里单位切换。最后通过 os 模块获取脚本路径,将地图保存为 HTML 文件。
结果如下:
气泡地图.html
四、关联地图(Associative Map)
1.定义
关联地图是一种将地理空间数据与其他属性数据(如经济指标、人口数量、环境数据等)结合,通过可视化方式呈现空间分布与属性关联的图表。它通过地理坐标定位数据点,并利用颜色、大小、形状等视觉变量映射属性值,帮助用户直观分析空间模式与数据关联。
2.特点
-
空间与属性结合:融合地理位置与多维数据,展现 “在哪里” 和 “有什么” 的双重信息。
-
视觉变量丰富:通过气泡大小、颜色深浅、图标类型等编码数据,支持多维度对比。
-
交互性强:现代工具(如 Leaflet、Folium)支持缩放、弹窗提示、图层控制等交互功能,提升分析体验。
-
动态扩展性:可叠加多层数据(如交通网、行政区划),或通过动画展示时序变化。
3.变体
-
气泡地图(Bubble Map):用气泡大小表示单一数值变量(如 GDP、人口),位置由经纬度确定,适合展示离散数据的空间分布。
-
热力地图(Heat Map):通过颜色渐变表示区域数据密度(如人流量、犯罪率),强调空间聚集性,适合连续数据。
-
符号地图(Symbol Map):使用不同图标形状或符号类型区分数据类别(如不同产业类型),结合颜色或大小表示数值。
-
choropleth 地图(分级统计图):将区域划分为行政单元(如省份、城市),用颜色填充表示单元内的统计值(如人均 GDP),适合面状数据。
4.优缺点
优点:
-
直观呈现数据的空间分布与属性关联,降低理解门槛。
-
支持多维度数据整合,适合探索性分析(如寻找经济与人口的空间相关性)。
-
交互性强,可动态筛选或钻取细节(如点击气泡查看详细指标)。
缺点:
-
数据预处理复杂:需匹配地理坐标(如经纬度)与属性数据,可能存在地址解析误差。
-
视觉干扰风险:气泡重叠或颜色选择不当会影响可读性,尤其在数据密集区域。
-
区域划分限制:行政边界可能掩盖微观差异(如城市内部的贫富分布)。
5.应用场景
-
商业分析:门店选址(结合人口密度与消费能力)、市场分布(展示客户区域与购买力关联)。
-
城市规划:交通流量分析(热力图显示拥堵点)、公共设施布局(如医院覆盖范围)。
-
环境科学:污染物扩散模拟(动态气泡 + 热力叠加)、气候数据空间分布。
-
社会科学:选举结果地理分布、教育水平与经济发展的空间相关性研究。
6.使用Python实现
import folium
from folium.plugins import MarkerCluster
import os# 定义城市地标数据(包含经纬度、类型、名称等信息)
landmarks = [{"名称": "纽约证券交易所", "类型": "金融", "国家": "美国", "经度": -74.0113, "纬度": 40.7069, "描述": "全球最大的证券交易所之一"},{"名称": "东京塔", "类型": "旅游", "国家": "日本", "经度": 139.7454, "纬度": 35.6586, "描述": "东京的地标性建筑"},{"名称": "上海外滩", "类型": "旅游", "国家": "中国", "经度": 121.4900, "纬度": 31.2399, "描述": "上海的标志性景点"},{"名称": "伦敦证券交易所", "类型": "金融", "国家": "英国", "经度": -0.0870, "纬度": 51.5144, "描述": "欧洲最大的证券交易所"},{"名称": "迪拜塔", "类型": "旅游", "国家": "阿联酋", "经度": 55.2708, "纬度": 25.1972, "描述": "世界最高建筑"},{"名称": "中关村", "类型": "科技", "国家": "中国", "经度": 116.3079, "纬度": 39.9853, "描述": "中国的硅谷"},{"名称": "硅谷", "类型": "科技", "国家": "美国", "经度": -122.0850, "纬度": 37.3861, "描述": "全球科技产业中心"},{"名称": "巴黎铁塔", "类型": "旅游", "国家": "法国", "经度": 2.2945, "纬度": 48.8584, "描述": "法国的标志性建筑"},{"名称": "新加坡樟宜机场", "类型": "交通", "国家": "新加坡", "经度": 103.9893, "纬度": 1.3501, "描述": "全球最佳机场之一"},{"名称": "悉尼歌剧院", "类型": "文化", "国家": "澳大利亚", "经度": 151.2153, "纬度": -33.8568, "描述": "世界著名的表演艺术中心"}
]# 定义不同类型地标的图标颜色和形状
type_mapping = {"金融": {"color": "blue", "icon": "money", "prefix": "fa"},"旅游": {"color": "red", "icon": "camera", "prefix": "fa"},"科技": {"color": "green", "icon": "rocket", "prefix": "fa"},"交通": {"color": "purple", "icon": "plane", "prefix": "fa"},"文化": {"color": "orange", "icon": "building", "prefix": "fa"}
}# 创建地图,以全球为中心
m = folium.Map(location=[20, 0], # 全球中心zoom_start=2,tiles='CartoDB positron', # 使用简洁的白底地图control_scale=True # 显示比例尺
)# 创建标记聚类
marker_cluster = MarkerCluster(name="地标分布").add_to(m)# 添加符号标记
for landmark in landmarks:# 获取类型对应的图标配置type_info = type_mapping.get(landmark["类型"], {"color": "gray", "icon": "question-circle", "prefix": "fa"})# 创建自定义HTML弹出内容popup_html = f"""<div style="font-family: 'Microsoft YaHei', sans-serif; width: 220px;"><h4 style="margin-bottom: 5px; color: #2c3e50;">{landmark['名称']},{landmark['国家']}</h4><hr style="margin: 5px 0; border: 0; border-top: 1px solid #eee;"><p><strong>类型:</strong> {landmark['类型']}</p><p><strong>描述:</strong> {landmark['描述']}</p><p><strong>坐标:</strong> {landmark['纬度']:.2f}, {landmark['经度']:.2f}</p></div>"""# 创建自定义图标custom_icon = folium.Icon(color=type_info["color"],icon=type_info["icon"],prefix=type_info["prefix"])# 添加标记到地图folium.Marker(location=[landmark["纬度"], landmark["经度"]],popup=folium.Popup(popup_html, max_width=300),tooltip=f"{landmark['名称']} ({landmark['类型']})",icon=custom_icon).add_to(marker_cluster)# 添加地图控件
folium.LayerControl(position='topright',collapsed=False,name='图层控制'
).add_to(m)# 获取当前脚本所在目录
script_dir = os.path.dirname(os.path.abspath(__file__))
output_path = os.path.join(script_dir, 'symbol_map.html')# 保存地图并确保中文编码
try:m.save(output_path)print(f"符号地图已成功保存到: {output_path}")# 尝试自动打开地图import webbrowserwebbrowser.open('file://' + output_path)
except Exception as e:print(f"保存地图时出错: {e}")print(f"请手动打开: {output_path}")
这段Python代码使用folium库创建了一个交互式全球地标符号地图,通过不同颜色和形状的图标直观展示了金融、旅游、科技等五类地标分布。代码首先定义了包含名称、类型、经纬度等信息的地标数据列表,然后为每种类型配置对应的Font Awesome图标样式(如金融用蓝色金钱图标)。地图以全球为中心,采用简洁的CartoDB底图,并添加了比例尺控件。通过MarkerCluster插件实现地标点的聚类显示,避免密集区域的视觉重叠。每个地标点配置了自定义HTML弹窗,包含详细信息,支持中文显示。循环遍历所有地标数据,根据类型获取对应图标样式,创建带图标的标记点并添加到聚类中。最后添加图层控制功能,将地图保存为HTML文件并尝试自动打开。
五、等值线图(Isoline Chart)
1.定义
等值线图是一种用连续曲线(等值线)连接数值相等的点,以展示二维平面上数据分布、变化趋势和空间关系的图表。等值线(如等高线、等温线)上的每一点代表同一数值,通过线条的疏密、走向和形状,直观反映数据的梯度变化和空间连续性。
2.特点
-
连续性与趋势性:通过等值线的走向和弯曲,清晰展示数据的空间分布趋势(如升高、降低、聚集)。
-
数值直观性:每条等值线标注具体数值,便于快速定位数据区间(如海拔 500 米等高线)。
-
空间关联性:适用于展示地理空间数据(如地形、气候)或二维平面数据(如温度场、气压场)。
-
密度反映梯度:等值线越密集,数据变化越剧烈;越稀疏,变化越平缓。
3.变体
-
等高线图(Topographic Contour):用于展示地形海拔,常见于地图测绘(如等高线间隔为 10 米)。
-
等温线图(Isotherm):展示温度分布,如气象图中不同温度区域的划分。
-
等压线图(Isobar):用于气象学中表示气压分布,辅助分析天气系统。
-
等降水量线图(Isohyet):展示降水的空间分布,常用于气候研究。
-
二维数据场等值线图:非地理数据(如化学反应浓度、传感器数据)的等值线可视化。
4.优缺点
优点 | 缺点 |
---|---|
1. 直观展示数据连续变化和空间分布。 2. 适用于大数据量的全局趋势分析。 3. 支持多变量叠加(如地形 + 降水)。 | 1. 对离散数据需插值处理,可能引入误差。 2. 复杂数据场中线条易重叠,可读性下降。 3. 难以展示局部细节突变。 |
5.应用场景
-
地理与环境科学:地形分析(等高线)、气候分布(温度、降水)、地质勘探(岩层海拔)。
-
气象与海洋学:天气图中的气压、湿度分布,洋流温度场分析。
-
工程与制造业:热传导分析(温度等值线)、材料应力分布、污染物扩散模拟。
-
经济学与社会学:人口密度分布、房价梯度分析(需空间数据插值)。
6.使用Python实现
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import griddata# ----------------------
# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置黑体
plt.rcParams['axes.unicode_minus'] = False # 显示负号
# ----------------------# 生成模拟数据(离散点)
np.random.seed(42)
n_points = 100 # 采样点数
x = np.random.uniform(-5, 5, n_points) # x坐标范围[-5, 5]
y = np.random.uniform(-5, 5, n_points) # y坐标范围[-5, 5]
# 生成海拔高度(z值),基于二维高斯函数
z = np.exp(-(x**2 + y**2)/10) * np.random.uniform(0.8, 1.2, n_points)# 插值生成网格数据(用于绘制连续等值线)
xi = np.linspace(-5, 5, 100) # x轴网格点
yi = np.linspace(-5, 5, 100) # y轴网格点
xi, yi = np.meshgrid(xi, yi) # 生成网格矩阵
zi = griddata((x, y), z, (xi, yi), method='cubic') # 三次样条插值# 绘制等值线图
plt.figure(figsize=(8, 6))
# 绘制等值线(线条)
contour = plt.contour(xi, yi, zi, levels=10, linewidths=0.7, colors='k')
# 填充等值线区间(可选)
contour_filled = plt.contourf(xi, yi, zi, levels=10, cmap='viridis')
# 添加颜色条
plt.colorbar(contour_filled, label='海拔高度')
# 标注等值线数值
plt.clabel(contour, inline=True, fontsize=8)
# 设置标题和坐标轴
plt.title('模拟地形等值线图')
plt.xlabel('X坐标')
plt.ylabel('Y坐标')
plt.grid(True, linestyle='--', alpha=0.7)
plt.gca().set_aspect('equal', adjustable='box') # 保持纵横比
plt.show()
这段Python代码使用matplotlib和scipy库生成了一幅模拟地形的等值线图,用于展示二维空间中海拔高度的分布和变化趋势。代码首先通过随机采样生成100个离散点,其坐标(x, y)均匀分布在[-5, 5]的区间内,海拔高度z由二维高斯函数计算并叠加随机扰动,模拟真实地形的起伏。接着利用griddata函数对离散点进行三次样条插值(method='cubic'),将离散数据转化为规则网格数据(xi, yi, zi),以便绘制连续的等值线。绘图部分通过contour和contourf分别绘制等值线线条和填充区间,levels=10控制等值线的数量,cmap='viridis'设置渐变色方案。添加颜色条、数值标注、网格线和坐标轴标签后,通过set_aspect('equal')保持纵横比,确保地形比例真实。最终生成的图形中,密集的等值线表示坡度陡峭区域,稀疏处则表示平缓地形,颜色越深(如蓝色)代表海拔越低,越亮(如橙色)代表海拔越高,直观展现了数据的空间分布和梯度变化。
注:黑色线条为等值线,标注海拔数值(如 0.2、0.4 等),线条越密集表示坡度越陡。颜色填充区域(contourf
)通过渐变色直观展示数值高低(如蓝色代表低海拔,橙色代表高海拔)。
六、点密度图(Dot Density Map)
1.定义
点密度图是一种通过在地理区域内随机分布一定数量的点,来表示现象分布密度的专题地图。每个点代表一定的数量或频次,通过点的疏密程度直观反映数据的空间分布特征和聚集趋势。例如,用 1 个点代表 100 人,在人口密集区域密集打点,稀疏区域则减少点数,从而可视化人口分布密度。
2.特点
-
直观性:通过点的疏密直接呈现数据分布,无需复杂统计即可感知热点区域。
-
连续性:点的分布可模拟现象的连续分布特征(如人口、疾病发生率)。
-
灵活性:可通过调整点的大小、数量或代表值(如 1 点 = 50 人 vs. 1 点 = 100 人)适应不同数据规模。
-
空间对比:适合展示同一区域内不同子区域的密度差异,或多区域间的横向对比。
3.变体
-
标准点密度图:基础形式,点大小一致,密度仅由点数决定。
-
分级点密度图:根据数据分级(如高、中、低)调整点的密度或大小,突出层次差异。
-
比例符号点密度图:点的大小与数据值成比例(如大点数代表更高密度),结合了点密度与比例符号的特点。
-
动态点密度图:通过时间序列数据制作动态效果,展示密度随时间的变化(如人口迁移、疫情扩散)。
4.优缺点
优点 | 缺点 |
---|---|
1. 视觉冲击力强,易于理解数据分布模式。 2. 适用于展示连续型或离散型空间数据(如人口、犯罪事件)。 3. 可灵活调整点参数以适应不同数据规模。 | 1. 点的随机分布可能掩盖真实空间模式(如聚类或离散点)。 2. 密集区域的点可能重叠,导致视觉混淆。 3. 依赖人工设定点代表值,可能引入主观性。 |
5.应用场景
-
人口与社会科学:可视化人口密度、教育资源分布、医疗设施覆盖情况。
-
环境与地理:展示降水分布、物种栖息地密度、污染浓度扩散。
-
商业与市场分析:分析客户分布密度、门店覆盖范围、消费热点区域。
-
公共卫生:疫情病例分布、疾病传播风险区域识别。
-
城市规划:交通流量密度、土地利用强度分析。
6.使用Python实现
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import Normalize# ----------------------
# 解决中文显示问题
plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置黑体
plt.rcParams['axes.unicode_minus'] = False # 显示负号
# ----------------------# 设置随机种子
np.random.seed(42)# 定义3个城市中心的参数
city_params = [{"loc": (1, 3), "scale": (1, 1), "n_points": 1500},{"loc": (5, 6), "scale": (1, 1), "n_points": 2500},{"loc": (8, 4), "scale": (1, 1), "n_points": 1000}
]# 生成各城市数据并合并
x_list, y_list = [], []
for params in city_params:x = np.random.normal(loc=params["loc"][0], scale=params["scale"][0], size=params["n_points"])y = np.random.normal(loc=params["loc"][1], scale=params["scale"][1], size=params["n_points"])x_list.append(x)y_list.append(y)x = np.concatenate(x_list)
y = np.concatenate(y_list)# 计算相对密度
density = np.sqrt((x - 5)**2 + (y - 5)**2)# 绘制点密度图(方法一:直接从scatter获取颜色映射)
plt.figure(figsize=(10, 6))
scatter = plt.scatter(x, y,s=200 / density,c=density,alpha=0.6,cmap='viridis',edgecolor='none'
)# 添加颜色条
plt.colorbar(scatter, label='相对密度')# 美化图表
plt.title('模拟区域人口密度点图', fontsize=14)
plt.xlabel('X坐标', fontsize=12)
plt.ylabel('Y坐标', fontsize=12)
plt.xlim(0, 10), plt.ylim(0, 10)
plt.grid(False)
plt.gca().set_aspect('equal', adjustable='box')
plt.show()
这段Python代码通过matplotlib库绘制了一幅模拟区域的人口密度点图,直观展示了不同区域的人口分布特征。代码首先通过设置中文字体解决了中文显示问题,确保图表标题和标签正常显示。接着定义了3个城市中心的参数(位置、分布范围和点数),利用正态分布生成各城市的坐标数据并合并,模拟真实城市的人口聚集现象。通过计算各点到全局中心(5,5)的欧氏距离作为相对密度指标,距离越近则密度越高。绘图时使用scatter函数绘制散点,点的大小与密度成反比(密度越高点越小、越密集),颜色通过viridis色卡映射密度值(蓝色代表低密度,橙色代表高密度),并添加透明度避免重叠遮挡。最后通过`colorbar`关联散点图的颜色映射,清晰展示密度与颜色的对应关系。
七、流场图(Flow Field Diagram)
1.定义
流场图是一种用于可视化矢量场数据(如速度、力、方向等)的图表,通过箭头、流线或粒子轨迹展示数据的流动方向和强度。它广泛应用于物理学、工程学、气象学、流体力学等领域,用于分析流体运动、磁场分布、人群流动等具有方向性和 magnitude 的数据。
2.特点
-
矢量可视化:通过箭头的方向表示矢量方向,箭头长度或颜色表示矢量大小(强度)。
-
连续性:流线(Streamline)或迹线(Pathline)展示粒子在矢量场中的运动轨迹,强调数据的动态趋势。
-
密度与分布:通过箭头密度或流线密集程度反映矢量场的强度分布。
-
交互性:常用于动态可视化(如动画),展示随时间变化的矢量场特性。
3.变体
-
箭头图(Arrow Plot):用离散箭头表示矢量方向和大小,适合稀疏数据或局部特征分析。
-
流线图(Streamline Plot):通过积分曲线(流线)展示矢量场的流动趋势,流线切线方向与矢量方向一致,适合连续场分析。
-
粒子追踪图(Particle Tracing):在矢量场中释放虚拟粒子,通过粒子运动轨迹(迹线)可视化流动模式,增强动态感。
-
向量场密度图(Vector Field Density):结合颜色映射和箭头密度,用颜色表示矢量大小,箭头方向表示方向,适合复杂场的全局分析。
4.优缺点
优点 | 缺点 |
---|---|
1. 直观展示矢量方向和强度分布。 2. 支持连续场和动态数据可视化。 3. 适用于多变量分析(如速度、压力耦合)。 | 1. 离散箭头可能掩盖场的连续性。 2. 密集箭头会导致视觉混乱。 3. 对高维数据可视化能力有限。 |
5.应用场景
-
自然科学:流体力学(如河道水流、大气环流)、电磁学(磁场分布)。
-
工程领域:航空航天(飞机周围气流分析)、汽车设计(空气动力学模拟)。
-
社会科学:人群流动分析(地铁站人流方向)、交通流量模拟。
-
数据科学:向量场数据降维可视化、机器学习梯度下降过程演示。
6.使用Python实现
import numpy as np
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from matplotlib.colors import Normalize# 设置中文字体
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC"]
plt.rcParams["axes.unicode_minus"] = False # 正确显示负号# 创建地图,使用PlateCarree投影(等距圆柱投影)
fig = plt.figure(figsize=(12, 8))
ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())# 设置地图范围(经纬度)
lon_min, lon_max = 115, 135
lat_min, lat_max = 20, 40
ax.set_extent([lon_min, lon_max, lat_min, lat_max], crs=ccrs.PlateCarree())# 添加地理特征
ax.add_feature(cfeature.LAND, color='lightgray', alpha=0.5)
ax.add_feature(cfeature.OCEAN, color='lightblue', alpha=0.5)
ax.add_feature(cfeature.COASTLINE, linewidth=1)
ax.add_feature(cfeature.BORDERS, linestyle=':')
ax.add_feature(cfeature.RIVERS, color='blue', alpha=0.7)
ax.add_feature(cfeature.LAKES, color='blue', alpha=0.7)# 添加网格线
gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=True,linewidth=1, color='gray', alpha=0.5, linestyle='--')
gl.top_labels = False
gl.right_labels = False# 生成网格点(模拟经纬度网格)
lon = np.linspace(lon_min, lon_max, 30)
lat = np.linspace(lat_min, lat_max, 30)
Lon, Lat = np.meshgrid(lon, lat)# 模拟风场数据(u: 东西方向风速,v: 南北方向风速)
# 风速受纬度、经度和距离海岸线的影响
u = 5 * np.cos(Lat * np.pi/180) + 2 * np.sin(Lon * np.pi/180)
v = 3 * np.sin(Lat * np.pi/180) - 1 * np.cos(Lon * np.pi/180)# 添加洋流影响(靠近海岸线的区域)
coast_influence = np.exp(-((Lon-125)**2 + (Lat-30)**2)/20)
u = u - 2 * coast_influence
v = v + 1 * coast_influence# 计算风速大小(用于颜色映射)
wind_speed = np.sqrt(u**2 + v**2)# 绘制流场图(流线)
streamplot = ax.streamplot(Lon, Lat, u, v,density=2, # 流线密度color=wind_speed, # 颜色由风速决定cmap='jet', # 颜色映射linewidth=2, # 线宽arrowsize=1.5, # 箭头大小transform=ccrs.PlateCarree() # 指定数据的坐标系
)# 添加颜色条
cbar = plt.colorbar(streamplot.lines, ax=ax, pad=0.05)
cbar.set_label('风速 (m/s)', fontsize=12)# 添加标题
plt.title('东亚地区模拟风场与洋流流场图', fontsize=16)# 显示地图
plt.tight_layout()
plt.show()
这段Python代码利用cartopy和matplotlib库绘制了东亚地区的模拟风场与洋流流场图,结合地理特征直观展示矢量场分布。代码首先配置中文字体解决显示问题,随后创建等距圆柱投影地图,设定东亚地区经纬度范围(115°E-135°E,20°N-40°N),并叠加陆地、海洋、海岸线、河流等地理要素,通过网格线增强空间定位。模拟数据部分,基于经纬度生成网格点,通过三角函数和指数函数构建风速分量`u`(东西方向)和`v`(南北方向),并引入以(125°E, 30°N)为中心的洋流影响,使靠近该区域的风速受指数衰减函数调制。绘图时使用`streamplot`绘制流线,颜色映射风速大小(`jet`色卡,蓝色到红色表示低速到高速),箭头大小和密度参数控制可视化细节,最后添加颜色条和标题。运行结果中,流线走向反映风向,密集处表示流场变化剧烈,颜色深浅对应风速,地理底图与流场叠加清晰呈现了模拟的气象与洋流模式,适用于地理空间矢量数据的动态分析与展示。
八、总结
图表类型 | 核心特点 | 优点 | 缺点 | 应用场景 |
---|---|---|---|---|
蜂窝热力图 | 1. 规则六边形聚合数据,避免点重叠; | 1. 数据聚合清晰,视觉平衡; | 需预设网格大小,可能掩盖局部细节或过度简化数据。 | 城市交通流量分析、犯罪热点分布、商业网点密度评估。 |
变形地图 | 1. 面积与数据值成正比,突出数值差异; | 高效展示区域间总量差异(如 GDP、选举结果),对比直观。 | 地理形状失真可能导致空间认知偏差,需结合传统地图辅助解读。 | 全球人口分布、经济指标对比、疫情感染人数可视化。 |
气泡地图 | 1. 二维视觉通道(位置 + 大小)展示空间与数值关联; | 简单直观,适合离散点数据(如城市指标、企业分布),支持动态交互。 | 高密度区域气泡易重叠,需配合透明度或聚合处理。 | 电商订单分布、空气质量监测、跨国公司分支机构布局。 |
关联地图 | 通过统计值(如 Pearson 系数)揭示空间关联模式,需统计预处理。 | 适合探索性分析,发现变量间空间依赖关系(如气温与能耗)。 | 需较强统计背景,结果需谨慎解读(相关性≠因果性)。 | 环境科学(污染物与风速关联)、社会科学(教育水平与收入相关性)。 |
等值线图 | 1. 线条间距反映数据梯度变化; | 高效展示连续数据的空间变化趋势,适合地形、气候等领域。 | 离散数据需插值(可能引入误差),线条密集时可读性下降。 | 气象预报(气压场)、地质学(岩层分布)、城市规划(噪音等值线)。 |
点密度图 | 1. 点位置随机但整体密度符合统计值; | 视觉接近真实分布,避免分区边界限制,适合人口、自然资源等。 | 点大小和密度设置不当易混淆,大数据量时渲染性能差。 | 农业作物分布、野生动物栖息地监测、公共设施覆盖评估。 |
流场图 | 1. 箭头 / 流线方向、长度、颜色编码多维数据; | 直观展示动态过程的空间路径和交互关系(如台风路径、人流预测)。 | 数据需为矢量场(如 u/v 分量),预处理复杂;静态图难表现时间变化。 | 气象学(洋流模拟)、海洋学(台风路径)、交通规划(车流预测)。 |
图表类型 | 数据类型 | 核心视觉通道 | 优势场景 |
---|---|---|---|
蜂窝热力图 | 离散 / 聚合数据 | 颜色(密度) | 高密度点分布 |
变形地图 | 区域统计数据 | 面积缩放 | 总量对比(非空间关系) |
气泡地图 | 离散点 + 数值变量 | 位置 + 大小 + 颜色 | 多维度点数据展示 |
关联地图 | 双变量空间数据 | 颜色(相关系数) | 变量相关性探索 |
等值线图 | 连续型空间数据 | 线条 + 颜色填充 | 地形、气候等梯度变化 |
点密度图 | 区域统计数据 | 点分布密度 | 模拟连续分布趋势 |
流场图 | 矢量场数据(u/v) | 箭头 / 流线 + 颜色 | 动态流动过程可视化 |
选择建议
-
空间分布趋势:蜂窝热力图、点密度图、等值线图(连续数据选等值线,离散选点密度)。
-
区域对比:变形地图(总量)、气泡地图(离散点数值)。
-
动态过程:流场图(矢量流动)、动态气泡地图(时间维度)。
-
相关性分析:关联地图(需统计基础)。