matlab使用教程(57)—地理图的底图和表格数据分析

1.访问用于地理坐标区和地理图的底图

        MathWorks® 提供了底图供您选择,可与地理坐标区和地理图结合使用。底图提供了多种地图选项,包括双色调、彩色地形和高缩放级别显示等。有六幅底图是使用 Natural Earth 创建的图块化数据集。其中五个底图是由 Esri ® 托管的高缩放级别地图。有关底图选项的详细信息,请参阅 geobasemap
        要为地理坐标区或地理图指定底图,您可以采用以下方式之一:
• 使用 geobasemap 函数。
• 设置 GeographicAxes GeographicBubbleChart 对象的 Basemap 属性。
        您也可以使用 Mapping Toolbox™ 函数 addToolbarMapButton 将底图选择器添加到坐标区工具栏。
        MATLAB 包括一个已安装的底图,一个名为 'darkwater' 的双色地图。使用此底图不需要访问Internet。使用其他底图,包括默认底图 'streets-light' ,确实需要访问 Internet。
        如果不能通过 Internet 访问底图,请检查代理服务器设置。有关指定代理服务器设置的详细信息,请参阅“Use MATLAB Web Preferences For Proxy Server Settings”。
        如果您无法稳定地访问 Internet,或希望改善地图的响应性能,您可以使用 'darkwater' 底图进行绘图,或将选择的底图下载到本地系统。

1.1 在地理图上显示 "darkwater"

        要在使用 geoplot geoscatter 等函数绘图时显示 "darkwater" 底图,请调用 geobasemap
lat1 = [33.448 29.424 32.716 32.777 37.338];
lon1 = [-112.074 -98.494 -117.161 -96.797 -121.886];
geoscatter(lat1,lon1,"*")
geobasemap darkwater

        您也可以创建一组地理坐标区,并指定 Basemap 名称-值对组。
figure
lat2 = [40.713 34.052 41.878 29.760 39.952];
lon2 = [-74.006 -118.244 -87.630 -95.370 -75.165];
geoaxes("Basemap","darkwater")
geoscatter(lat2,lon2,"*")

        在您的 MATLAB 会话期间,您还可以更改使用 geoplot geoscatter geodensityplot 创建的所有绘图的默认底图。
set(groot,"defaultGeoaxesBasemap","darkwater")

1.2 在地理气泡图上显示 "darkwater"

        要在地理气泡图上显示 "darkwater" ,请使用 Basemap 名称-值参数调用 geobubble
tsunamis = readtable("tsunamis.xlsx");
geobubble(tsunamis,"Latitude","Longitude","Basemap","darkwater")

        您也可以使用 geobasemap 指定底图。
counties = readtable("counties.xlsx");
geobubble(counties,"Latitude","Longitude")
geobasemap darkwater

1.3 下载底图

        使用附加功能资源管理器将底图下载到您的本地系统。Esri 提供的五幅高缩放级别底图不可下载。
1 在 MATLAB 主页 选项卡的 环境 部分,点击 附加功能 > 获取附加功能
2 在“附加功能资源管理器”中,滚动到 MathWorks 可选功能 部分,然后点击 显示所有 以找到底图
包。您还可以按名称搜索底图附加功能(如下表所列),或点击 按类型过滤 中的 可选功能
3 选择要下载的底图数据包。

1.4 底图缓存行为

        通过 Internet 访问底图时,MATLAB 会通过临时缓存底图图块来提高性能。有了这种缓存行为,当您在地图内平移和缩放时,程序只需下载每个图块一次即可。即使断开 Internet 连接,您仍然可以查看已查看过的地图部分,因为地图图块已存储在本地。

        在未连接到 Internet 的情况下尝试查看之前未查看过的地图部分时,这些区域的图块不在缓存中。对于使用 Natural Earth 创建的底图,该程序使用 'darkwater' 底图中的图块替换缺失图块。对于 Esri 提供的高缩放级别底图,程序可缓存有限数量的图块,缓存的图块在有限时间后过期。如果您尝试查看未缓存的高缩放级别底图的区域,您将看到空白地图图块。地理图不会使用来自 'darkwater' 的图块来显示这些缺失图块。

2.基于表格数据创建地理气泡图

        地理气泡图是一种以可视化方式在地图上叠加显示数据的图形。对于具有地理特征的数据,这些图可以提供重要的上下文信息。在此示例中,您将文件以表的形式导入 MATLAB® 中,并基于表变量(列)创建地理气泡图。然后,再使用表中的数据来可视化显示数据的各个方面,例如人口数量大小。

2.1 以表的形式导入文件

        加载样本文件 counties.xlsx ,其中包含新英格兰各郡的人口数据和莱姆病病例数据。使用 readtable 将数据读入一个表中。
counties = readtable('counties.xlsx');

2.2 创建基本地理气泡图

        创建一个地理气泡图,显示新英格兰各郡的位置。将该表指定为第一个参数 counties。地理气泡图将该表存储在其 SourceTable 属性中。使用表的 'Latitude' 'Longitude' 列指定位置。该图自动设置底层地图(称为底图)的纬度和经度范围,以仅包括由这些数据表示的区域。将 GeographicBubbleChart 对象赋给变量 gb 。在创建图后,可使用 gb 对其进行修改。
figure
gb = geobubble(counties,'Latitude','Longitude');

        可以在 geobubble 函数显示的底图上平移和缩放。

2.3 在图上可视化显示各郡人口

        用气泡大小(直径)表示不同郡的相对人口。将表中的 Population2010 变量指定为 SizeVariable 参数的值。在所得到的地理气泡图中,气泡的不同大小代表着人口的多少。该图包括了一个描述气泡直径与人口数量对应关系的图例。使用 geolimits 调整图的范围。
gb = geobubble(counties,'Latitude','Longitude',...
'SizeVariable','Population2010');
geolimits([39.50 47.17],[-74.94 -65.40])

        geobubble SizeLimits 属性指定的值的范围内对气泡直径进行线性缩放。

2.4 可视化显示各郡莱姆病病例

        使用气泡颜色显示某郡在给定年份的莱姆病病例数。要显示此类型的数据,geobubble 函数要求所提供的数据为 categorical 值。原始表中的各列数据都不是分类数据,但您可以创建一个分类数据。例如,您可以使用 discretize 函数基于 Cases2010 变量中的数据创建一个分类变量。名为 Severity 的新变量将数据分为三个类别:Low、Medium 和 High。使用这个新变量作为 ColorVariable 参数。这些更改会修改存储在 SourceTable 属性中的表,该表是工作区中原始表 counties 的副本。对GeographicBubbleChart 对象中存储的表进行更改可避免原始数据受到影响。
gb.SourceTable.Severity = discretize(counties.Cases2010,[0 50 100 500],...
'categorical', {'Low', 'Medium', 'High'});
gb.ColorVariable = 'Severity';

2.5 处理未定义的数据

        对严重性信息绘图时,颜色图例中将出现第四个类别:undefined 。当您转换为 categorical 的数据包含空值或超出您所定义类别的范围的值时,会显示此类别。将光标悬停在未定义的气泡上,确定未定义Severity 值的原因。数据提示显示,气泡代表莱姆病表第 33 行中的值。
        检查用于 Severity 的变量 Cases2010 的值,即莱姆病表第 33 行中的第 12 个变量。
gb.SourceTable(33,12)
ans=table
Cases2010
_________
514
        High 类别定义为介于 100 和 500 之间的值。但是,Cases2010 变量的值是 514。要消除此未定义的值,请重新设置 High 类别的上限以包含此值。例如,使用 5000。
gb.SourceTable.Severity = discretize(counties.Cases2010,[0 50 100 5000],...
'categorical', {'Low', 'Medium', 'High'});

        与颜色变量不同,当 geobubble 在大小、纬度或经度变量中遇到未定义的数字 (NaN) 时,它会忽略该值。

2.6 选择气泡颜色

        使用颜色梯度来表示 Low-Medium-High 分类。geobubble BubbleColorList 属性中将颜色存储为m×3 RGB 值列表。
gb.BubbleColorList = autumn(3);

2.7 对气泡颜色重新排序

        将指示高严重性的颜色更改为红色而不是黄色。要更改色序,您可以更改类别的顺序,也可以更改 BubbleColorList 属性中列出的颜色的顺序。例如,最初类别顺序为 Low-Medium-High。使用 reordercats 函数将类别顺序更改为 High-Medium-Low。颜色图例中的类别随之更改。
neworder = {'High','Medium','Low'};
gb.SourceTable.Severity = reordercats(gb.SourceTable.Severity,neworder);

2.8 添加标题

        当您使用大小和颜色变量显示地理气泡图时,该图会显示大小图例和颜色图例以指示相对大小和颜色的含义。当您指定表作为参数时, geobubble 会自动使用表变量名称作为图例标题,但您可以使用属性来指定其他标题。
title 'Lyme Disease in New England, 2010'
gb.SizeLegendTitle = 'County Population';
gb.ColorLegendTitle = 'Lyme Disease Severity';

2.9 细化处理图数据

        观察莱姆病数据,呈现的趋势似乎是更多病例发生在人口密度较大的地区。查看人口患病率最高的地点可能更有意义。计算每 1000 人中出现的病例数并显示在图上。
gb.SourceTable.CasesPer1000 = gb.SourceTable.Cases2010 ./ ...
gb.SourceTable.Population2010 * 1000;
gb.SizeVariable = 'CasesPer1000';
gb.SizeLegendTitle = 'Cases Per 1000';

        现在,气泡大小与之前有不同的意义。人口最多的地区与病例严重程度相对吻合。然而,如果按人口对病例数进行归一化处理,则人口患病风险最高的地点呈现不同的地理分布。
  • 28
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

配电网和matlab

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值