feather 设置坐标刻度_MATLAB作图实例:23:使用平行坐标图探索表格数据

24062436e2188f4b1ffe214fd39c292a.png

本示例说明了如何将文件作为表格导入到MATLAB中,如何从表格数据创建平行坐标图以及如何修改图的外观。

平行坐标图对于可视化具有多列的表格或矩阵数据很有用。输入数据的行对应于图中的线,输入数据的列对应于图中的坐标。您可以对图中的线进行分组,以更好地查看数据趋势。

将文件导入为表格

加载样本文件TemperatureData.csv,其中包含2015年1月至2016年7月的每日平均温度。将文件读入表格,并显示前几行。

 tbl = readtable('TemperatureData.csv');
 head(tbl)
 ans=8×4 table
     Year       Month       Day    TemperatureF
     ____    ___________    ___    ____________
 ​
     2015    {'January'}     1          23     
     2015    {'January'}     2          31     
     2015    {'January'}     3          25     
     2015    {'January'}     4          39     
     2015    {'January'}     5          29     
     2015    {'January'}     6          12     
     2015    {'January'}     7          10     
     2015    {'January'}     8           4     

创建基本平行坐标图

从表的前几行创建一个平行坐标图。绘图中的每一行对应于表中的一行。默认情况下,parallelplot以表中显示的顺序显示表中所有坐标变量。软件将在其相应的坐标标尺下方显示坐标变量名称。

该图显示表的前八行提供了2015年1月前八天的温度数据。例如,第八天平均是八天中最冷的一天。

 parallelplot(head(tbl))

224f37cf5af67f02c9f2b69cbca671fe.png

为了帮助您解释图,MATLAB默认会随机抖动图线,以使它们不太可能沿着坐标标尺完美重叠。例如,尽管前八个观测值具有相同的YearMonth值,但该图并未将与2015沿Year坐标标尺、January刻度线沿Month绘制为重合的样子。尽管抖动会影响所有坐标变量,但在分类坐标标尺上抖动通常更明显,因为抖动取决于刻度线之间的距离。您可以通过设置该Jitter属性来控制图中的抖动量。

请注意,Year坐标标尺上的某些刻度线是无意义的十进制值。为确保坐标标尺上的刻度线仅与有意义的值相对应,请使用categorical函数将变量转换为分类变量。

 tbl.Year = categorical(tbl.Year);

现在从整个表格创建一个平行坐标图。将ParallelCoordinatesPlot对象分配给变量p,并p在创建后用于修改图。例如,使用Title属性为绘图添加标题。

 p = parallelplot(tbl)
 p = 
   ParallelCoordinatesPlot with properties:
 ​
             SourceTable: [565x4 table]
     CoordinateVariables: {'Year'  'Month'  'Day'  'TemperatureF'}
           GroupVariable: ''
 ​
   Show all properties
 p.Title = 'Temperature Data';

191576899bebea791a9c623a46e37b06.png

4fe21e7b6a89af70887c8965d8ab23ea.png

为图线分组

按照Year值,通过设置GroupVariable属性,根据值将图中的线分组。默认情况下,MATLAB在图上添加图例。您可以通过将LegendVisible属性设置为'off'来删除图例。

 p.GroupVariable = 'Year';

2685323932ef319df5082162b34bcf3b.png

交互式重新排列坐标变量

以交互方式重新排列坐标变量,以更轻松地比较它们,并确定要保留在图中的变量。

在图形窗口中打开图。单击坐标刻度标签,然后将关联的坐标标尺拖到您选择的位置。该软件界面以黑色矩形勾勒出所选坐标标尺的轮廓。例如,您可以单击Month坐标刻度标签并将坐标标尺拖到右侧。然后,您可以轻松比较MonthTemperatureF值。

4b63756418f2e5360a4a1cc3e1fd60f3.png

当您重新排列交互坐标变量,该软件会更新图中相关联的CoordinateTickLabelsCoordinateVariables以及CoordinateData属性。

选择坐标变量的子集

p.SourceTable中显示坐标变量的子集,并通过设置pCoordinateVariables属性来指定其在图中的顺序。

特别地,从图中删除变量Day,并将源表的第四列中的TemperatureF变量,作为图中的第二个坐标显示出来。

 p.CoordinateVariables = [1 4 2];

bf201a14112e5b428e75109cbdd49238.png

或者,可以通过使用变量名称的字符串或单元格数组、或所选变量中包含true的元素的逻辑向量来设置CoordinateVariables属性。

修改坐标变量中的类别

显示Month类别的子集,并在图中沿着坐标标尺更改类别顺序。

由于某些月份仅具有一年的数据,因此请删除源表中与这些唯一月份相对应的行。更改源表后,MATLAB会立即更新绘图。

 uniqueMonth = {'September','October','November','December','August'};
 uniqueMonthIdx = ismember(p.SourceTable.Month,uniqueMonth);
 p.SourceTable(uniqueMonthIdx,:) = [];

2a861f3ff82e9895e7f2a67bef79ddd7.png

通过更新源表,沿着Month坐标标尺按时间顺序排列月份。

 categoricalMonth = categorical(p.SourceTable.Month);
 newOrder = {'January','February','March','April','May','June','July'};
 orderMonth = reordercats(categoricalMonth,newOrder);
 p.SourceTable.Month = orderMonth;

dbc8aae0319a197fa3c049befebe246b.png

使用合并值将绘图线分组

为了更好地可视化每个月的温度范围,使用discretize来对温度数据进行分组,并使用合并后的值对图中的线进行分组。检查源表中的最低和最高温度。设置分箱边界值,使其包含这些值。

 min(p.SourceTable.TemperatureF)
 ans = -3
 max(p.SourceTable.TemperatureF)
 ans = 80
 binEdges = [-3 10:10:80];
 bins = {'00s+/-','10s','20s','30s','40s','50s','60s','70s+'};
 groupTemperature = discretize(p.SourceTable.TemperatureF,binEdges,'categorical',bins);

将分箱的温度添加到源表中。根据合并的温度数据对图中的线进行分组。

 p.SourceTable.GroupTemperature = groupTemperature;
 p.GroupVariable = 'GroupTemperature';

04ebc46e0ee8bd66ed1d4f526ca75a1a.png

由于GroupTemperature包括七个以上类别,因此某些组在图中具有相同的颜色。通过设置Color属性为每个组分配不同的颜色。

 p.Color = jet(8);%设置jet调色板

e0e98ad5b515fafba03001d90f531aaf.png

注:本文根据MATLAB官网内容修改而成。

我推荐给你以下的视频教程,特点是没有PPT,不掺水,直接编程环境下的实操课程: 用100分钟了解MATLAB编程

知乎 - 安全中心​www.1data.pro

《MATLAB编程360》视频课程:

MATLAB编程360 - 网易云课堂study.163.com​study.163.com
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值