1.自定义地理坐标区的布局
通过修改地理坐标区的属性来自定义地理坐标区的布局。
在地图上的两个点之间绘制一条直线。使用西雅图和安克雷奇的坐标指定线的端点。以度为单位指定纬度和经度。
latSeattle = 47.62;
lonSeattle = -122.33;
latAnchorage = 61.20;
lonAnchorage = -149.9;
使用 geoplot
绘制数据。使用线条设定
'b:'
自定义线条外观。使用
geolimits 调整地图的纬度和经度范围。
geoplot([latSeattle latAnchorage],[lonSeattle lonAnchorage],'b:')
geolimits([45 62],[-149 -123])
自定义坐标区的布局。通过修改 Grid
、
Position
和
TickDir 属性来关闭网格,拉伸网格以占据整个图窗并关闭刻度线。
gx = gca;
gx.Grid = 'off';
gx.TickDir = 'out';
gx.Position = gx.OuterPosition;
2.部署地理坐标区和地理图
您可以使用 MATLAB Compiler™ 部署使用地理坐标区或地理图的 MATLAB 应用程序。根据所用的底图,所部署的应用程序中的地图交互与 MATLAB 会话中的地图交互相同,也就是说,该地图是“实时”的,可以平移和缩放。
注意 默认情况下,部署工具会预先选择所有已下载的 MATLAB Basemap Data 附加功能,以包含在部署的应用程序包中。不要选中所有底图。只选择您希望应用程序用户看到的底图。如果在部署的应用程序包中包括所有 MATLAB 底图数据附加功能,创建的文件可能会超过文件系统限制。
3.使用地理气泡图属性
本主题介绍可使用地理气泡图属性执行的一些常见任务。
3.1 控制气泡大小
您可以在地理气泡图中使用气泡大小来表达数据的可量化特征。例如,对于莱姆病样本数据,您可以使用气泡大小来可视化显示新英格兰各郡的病例数。地理气泡图的以下属性共同控制图上气泡的大小:
•
SizeData
•
SizeVariable
•
SizeLimits
•
BubbleWidthRange
SizeData 属性指定要在图上绘制的数据。
SizeData 必须是与纬度和经度向量大小相同的数值数据向量,或是标量。指定大小数据的另一种方法是向
geobubble 函数传递一个表作为它的第一个参数,并指定用作大小数据的表变量的名称。您可以使用
SizeVariable 属性来指定此表变量。当您使用表变量指定大小数据时,
geobubble
将此变量的值存储在
SizeData 属性中,并将该属性设置为只读。如果您没有指定
SizeData
,
geobubble 将使用大小完全相同的气泡在地图上的地理位置绘图。geobubble
对
BubbleWidthRange
属性设置的范围内的
SizeData 值进行线性缩放,从而确定每个气泡的大小(直径)。
BubbleWidthRange 是一个二元素向量,它指定以磅为单位的最小气泡直径和最大气泡直径。默认情况下,
BubbleWidthRange 将气泡直径的范围设置在 5 磅和 20 磅之间。您可以指定的气泡直径最小为 1 磅,最大为 100 磅。
使用 SizeLimits
属性来控制
SizeData
和
BubbleWidthRange
之间的映射。默认情况下,
SizeLimits
属性指定数据范围的极值。例如,当使用 Cases2010 变量作为
SizeVariable 时,莱姆病样本数据的
SizeLimits
默认值为
[0 514]
。
指定大小数据时,地理气泡图包含描述气泡大小与数据的映射关系的图例。geobubble
将
SizeLimits 属性中的值用作图例的上界和下界。指定表变量时,
geobubble
使用变量名称作为大小图例的标题。
3.2 缩小地理气泡图中的气泡
此示例说明如何使用 BubbleWidthRange 属性缩小地理气泡图中气泡的大小。(您还可以通过调整地理气泡图图窗的大小来减少重叠。)
将莱姆病样本数据读入工作区中。
counties = readtable('counties.xlsx');
使用表中的纬度、经度和病例数据创建地理气泡图。使用 geolimits
函数调整图的范围。
gb = geobubble(counties,'Latitude','Longitude','SizeVariable','Cases2010');
geolimits(gb,[41 47],[-75 -66])
查看地理气泡图的 SizeData
和
SizeLimits
属性的值。
size_data_values = gb.SizeData;
size_data_values(1:15)
ans = 15×1
331
187
88
125
240
340
161
148
38
4
⋮
size_limits = gb.SizeLimits
size_limits = 1×2
0 514
使用 BubbleWidthRange
属性缩小气泡以避免重叠。首先查看属性的初始设置。
default_width_range = gb.BubbleWidthRange
default_width_range = 1×2
5 20
gb.BubbleWidthRange = [4 15];
3.3 控制气泡颜色
您可以使用地理气泡图中的气泡颜色,根据数据类别对气泡着色。例如,在莱姆病样本数据中,您可以将新英格兰各郡的莱姆病的严重程度分为高、中、低三个等级。地理气泡图的以下属性共同控制图上气泡的颜色:
•
ColorData
•
ColorVariable
•
BubbleColorList
ColorData 属性指定用来控制图中气泡颜色的数据。
ColorData 必须是大小与纬度和经度相同的分类数据的向量。指定颜色数据的另一种方法是向
geobubble 传递一个表作为函数的第一个参数,并为该表指定用作颜色数据的表变量的名称。您可以使用
ColorVariable
属性来指定此表变量。
geobubble 将该表变量的值存储在
ColorData
属性中,并将该属性设置为只读。
如果您的数据最初不包含 categorical 变量,则您可以创建该变量。例如,莱姆病样本数据不包括分类变量。创建此类型的变量的一种方法是使用
discretize
函数。使用病例发生数据
cases2010,根据病例发生次数创建三个类别,分别将其描述为低、中、高三个严重级别。以下代码根据病例发生数据创建名为
Severity 的分类变量。
Severity = discretize(counties.Cases2010,[0 50 100 550],...
'categorical', {'Low', 'Medium', 'High'});
BubbleColorList 属性控制地理气泡图中气泡所用的颜色。该值是一个 m×3 数组,其中每行是一个RGB 颜色三元组。默认情况下,
geobubble 使用包含七种颜色的颜色集。如果您有七个以上的类别,会循环重复使用这些颜色。要更改使用的颜色,请使用其他 MATLAB 颜色图函数之一,例如
parula 或 jet
,或指定自定义颜色列表。
4.使用地理坐标区指定地图范围
地理坐标区或地理图将底图的纬度和经度范围设置为包含您数据中的所有点。当您通过调整图窗窗口大小来调整图大小时,这些地图范围不会改变,但在适应坐标区或图本身的变化时,地图范围会改变。缩放或平移时,地图范围会发生变化。地理坐标区和地理图支持与地图范围相关的属性。一些是只读属性,用于提供信息。
•
LatitudeLimits
- 返回当前纬度范围(只读)。
•
LongitudeLimits
- 返回当前经度范围(只读)。
•
MapCenter
- 返回或设置当前地图中心点。
•
ZoomLevel
- 返回或设置当前地图缩放级别。
获取当前纬度和经度范围的一条捷径是调用 geolimits
函数。您还可以使用
geolimits 函数来设置纬度和经度范围。当您要创建与现有坐标区或图具有相同地图范围的地理坐标区或地理图时,请使用
geolimits
函数。检索现有坐标区或图的范围,并使用
geolimits
设置新坐标区或图的范围。
注意 您可以指定超出大致范围
[-85 85] 的纬度,但底图图块不会延伸到此范围之外。不过,这些值通常是不可见的,除非您使用
MapCenter
和
ZoomLevel 属性控制地图范围。此外,非常接近 90 度和 -90 度的数据点也永远不可见,因为它们对应于垂直方向上无穷或接近无穷的值。
此示例说明如何使用相同的地图范围创建两个地理气泡图。
将莱姆病样本数据读入工作区中。
counties = readtable('counties.xlsx');
创建一个地理气泡图,绘制新英格兰各郡莱姆病的发生情况。
gb = geobubble(counties,'Latitude','Longitude','SizeVariable','Cases2010');
平移和缩放地图,直到只能看到新英格兰北部的州:佛蒙特州、新罕布什尔州和缅因州。
使用命令 [nlat nlon] = geolimits(gb)
获取新的地图范围。使用命令
nzoom = gb.ZoomLevel 获取新的缩放级别。存储新地图范围的经度、纬度和缩放级别。
nlat = [42.5577 46.6921];
nlon = [-73.5500 -66.8900];
nzoom = 6.3747;
使用 2011 年的莱姆病病例发生数据创建另一张地图,并设置与第一张图相匹配的地图范围和缩放级别。
figure
gb2 = geobubble(counties,'Latitude','Longitude','SizeVariable','Cases2011');
[n2lat n2lon] = geolimits(gb2,nlat,nlon);
gb2.ZoomLevel = nzoom;