Main Content

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

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

以表的形式导入文件

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

counties = readtable('counties.xlsx');

创建基本地理气泡图

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

figure
gb = geobubble(counties,'Latitude','Longitude');

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

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

用气泡大小(直径)表示不同郡的相对人口。将表中的 Population2010 变量指定为 SizeVariable 参数的值。在所得到的地理气泡图中,气泡的不同大小代表着人口的多少。该图包括了一个描述气泡直径与人口数量对应关系的图例。使用 geolimits 调整图的范围。

gb = geobubble(counties,'Latitude','Longitude',...
                        'SizeVariable','Population2010');
geolimits([39.50 47.17],[-74.94 -65.40])

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

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

使用气泡颜色显示某郡在给定年份的莱姆病病例数。要显示此类型的数据,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';

处理未定义的数据

对严重性信息绘图时,颜色图例中将出现第四个类别: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) 时,它会忽略该值。

选择气泡颜色

使用颜色梯度来表示 Low-Medium-High 分类。geobubbleBubbleColorList 属性中将颜色存储为 m×3 RGB 值列表。

gb.BubbleColorList = autumn(3);

对气泡颜色重新排序

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

neworder = {'High','Medium','Low'};
gb.SourceTable.Severity = reordercats(gb.SourceTable.Severity,neworder);

添加标题

当您使用大小和颜色变量显示地理气泡图时,该图会显示大小图例和颜色图例以指示相对大小和颜色的含义。当您指定表作为参数时,geobubble 会自动使用表变量名称作为图例标题,但您可以使用属性来指定其他标题。

title 'Lyme Disease in New England, 2010'
gb.SizeLegendTitle = 'County Population';
gb.ColorLegendTitle = 'Lyme Disease Severity';

细化处理图数据

观察莱姆病数据,呈现的趋势似乎是更多病例发生在人口密度较大的地区。查看人口患病率最高的地点可能更有意义。计算每 1000 人中出现的病例数并显示在图上。

gb.SourceTable.CasesPer1000 = gb.SourceTable.Cases2010 ./ ...
    gb.SourceTable.Population2010 * 1000;
gb.SizeVariable = 'CasesPer1000';
gb.SizeLegendTitle = 'Cases Per 1000';

现在,气泡大小与之前有不同的意义。人口最多的地区与病例严重程度相对吻合。然而,如果按人口对病例数进行归一化处理,则人口患病风险最高的地点呈现不同的地理分布。

另请参阅

| | | | | |

相关主题