Matlab平行坐标图创建函数parallelplot

4.3
(4)

今天,给各位介绍一个Matlab中,可以绘制平行坐标图的函数parallelplot。该函数在Matlab2020a中引入,由于我用的是Matlab2016版本,这里就不对代码进行试验了。直接把官方给的代码实例,分享给各位,以供参考。

本文主要介绍parallelplot函数的常见用法、语法说明、用表格数据创建平行坐标图、指定坐标变量和组变量、使用分 bin 数据创建平行坐标图、指定坐标和组数据、在绘图中更改数据归一化、对绘图中坐标变量的类别重新排序等。

Matlab平行坐标图创建函数parallelplot

由于我用的是Matlab2016,这里就不放帮助文本了,安装Matlab2020a以上版本的,可以运行help parallelplot自行查看帮助文本。

常见用法

parallelplot(tbl)
parallelplot(tbl,'CoordinateVariables',coordvars)
parallelplot(___,'GroupVariable',grpvar)
parallelplot(data)
parallelplot(data,'CoordinateData',coorddata)
parallelplot(___,'GroupData',grpdata)
parallelplot(___,Name,Value)
parallelplot(parent,___)
p = parallelplot(___)

语法说明

parallelplot(tbl) 根据表 tbl 创建一个平行坐标图。绘图中的每个线条代表表中的一行,绘图中的每个坐标变量对应于表中的一列。默认情况下,软件绘制所有表列。

parallelplot(tbl,’CoordinateVariables’,coordvars) 根据表 tbl 中的 coordvars 变量创建一个平行坐标图。

parallelplot(___,’GroupVariable’,grpvar) 使用 grpvar 指定的表变量对绘图中的线条进行分组。在前面语法中的任何输入参数组合后指定此选项。

parallelplot(data) 根据数值矩阵 data 创建一个平行坐标图。

parallelplot(data,’CoordinateData’,coorddata) 根据矩阵 data 中的 coorddata 列创建一个平行坐标图。

parallelplot(___,’GroupData’,grpdata) 使用 grpdata 中的数据对绘图中的线条进行分组。可在上述任一适用于数值矩阵数据的输入参数组合后指定此选项。

parallelplot(___,Name,Value) 使用一个或多个名称-值对组参数指定其他选项。例如,您可以为具有数值的坐标指定数据归一化方法。

parallelplot(parent,___) 在 parent 指定的图窗、面板或选项卡中创建平行坐标图。

p = parallelplot(___) 返回 ParallelCoordinatesPlot 对象。创建对象后,使用 p 修改该对象。

用表格数据创建平行坐标图

根据医疗患者数据表创建一个平行坐标图。

加载 patients 数据集,并基于加载到工作区中的变量子集创建一个表。使用表创建一个平行坐标图。绘图中的每个线条对应于单个患者。使用绘图观测数据中的趋势。例如,绘图表明吸烟者往往具有较高的血压值(包括舒张压和收缩压)。

load patients
tbl = table(Diastolic,Smoker,Systolic);
p = parallelplot(tbl)
Matlab平行坐标图创建函数parallelplot

输出结果为:

p = 
  ParallelCoordinatesPlot with properties:
            SourceTable: [100x3 table]
    CoordinateVariables: {'Diastolic'  'Smoker'  'Systolic'}
          GroupVariable: ''
  Show all properties

默认情况下,软件会沿坐标标尺随机抖动绘图线条,使其不会完全重叠。这种抖动对于可视化分类数据特别有用,因为它使您能够更轻松地区分绘图线条。例如,沿 Smoker 坐标标尺观察绘图线条;这些绘图线条并没有完全对齐到 true 或 false 刻度线。

要禁用默认抖动,请将 Jitter 属性设置为 0。

p.Jitter = 0;
Matlab平行坐标图创建函数parallelplot

指定坐标变量和组变量

根据海啸数据表创建一个平行坐标图。指定要显示的表变量及其顺序,并根据其中一个变量对绘图中的线条进行分组。

将海啸数据以表形式读入工作区中。

tsunamis = readtable('tsunamis.xlsx');

使用该表中的变量子集创建一个平行坐标图。首先,增大图窗窗口大小,以防止绘图过度拥挤。然后,要指定变量及其顺序,请使用 ‘CoordinateVariables’ 名称-值对组参数。要根据有效性对海啸事件进行分组,请将 ‘GroupVariable’ 名称-值对组参数设置为 ‘Validity’。绘图中的每个线条对应于单个海啸事件。绘图表明数据集中大多数具有 Validity 值的事件被认为是确定的海啸。

figure('Units','normalized','Position',[0.3 0.3 0.45 0.4])
coordvars = {'Year','Validity','Cause','Country'};
p = parallelplot(tsunamis,'CoordinateVariables',coordvars,'GroupVariable','Validity');
Matlab平行坐标图创建函数parallelplot

使用分 bin 数据创建平行坐标图

根据包含医疗患者数据的矩阵创建一个平行坐标图。对矩阵中一个列的值进行 bin 划分,并使用分 bin 值对绘图中的线条进行分组。

加载 patients 数据集,并根据 Age、Height 和 Weight 值创建一个矩阵。使用矩阵数据创建一个平行坐标图。为绘图中的坐标变量添加标签。绘图中的每个线条对应于单个患者。

load patients
X = [Age Height Weight];
p = parallelplot(X)

输出结果为:

p = 
  ParallelCoordinatesPlot with properties:
              Data: [100x3 double]
    CoordinateData: [1 2 3]
         GroupData: []
  Show all properties
p.CoordinateTickLabels = {'Age (years)','Height (inches)','Weight (pounds)'};
Matlab平行坐标图创建函数parallelplot

创建一个新分类变量,该分类变量将每个患者归入三个类别之一:short、average 或 tall。设置 bin 边界,使其包括最小和最大 Height 值。

min(Height)

输出结果为:

ans = 60
max(Height)

输出结果为:

ans = 72
binEdges = [60 64 68 72];
bins = {'short','average','tall'};
groupHeight = discretize(Height,binEdges,'categorical',bins);

现在使用 groupHeight 值对平行坐标图中的线条分组。绘图表明 short 患者体重往往低于 tall 患者。

p.GroupData = groupHeight;
Matlab平行坐标图创建函数parallelplot

指定坐标和组数据

根据包含医疗患者数据的矩阵创建平行坐标图。对于每个绘图,指定要显示的矩阵列,并根据一个单独变量对绘图中的线条进行分组。

加载 patients 数据集,并基于加载到工作区的变量中的一部分创建一个矩阵。

load patients
X = [Age Height Weight];

使用矩阵 X 中的列的子集创建一个平行坐标图。要指定列及其顺序,请使用 ‘CoordinateData’ 名称-值对组参数。通过将 Smoker 值传递给 ‘GroupData’ 名称-值对组参数,根据患者是否为吸烟者对其进行分组。绘图中的每个线条对应于单个患者。绘图表明是否为吸烟者与年龄或体重之间没有明显的关系。

coorddata = [1 3];
p = parallelplot(X,'CoordinateData',coorddata,'GroupData',Smoker)

输出结果为:

p = 
  ParallelCoordinatesPlot with properties:
              Data: [100x3 double]
    CoordinateData: [1 3]
         GroupData: [100x1 logical]
  Show all properties
p.CoordinateTickLabels = {'Age','Weight'};
Matlab平行坐标图创建函数parallelplot

使用 X 中列的另一个子集创建另一个平行坐标图。根据患者的性别对其进行分组。绘图表明男人的身高和体重高于女人。

coorddata2 = [2 3];
p2 = parallelplot(X,'CoordinateData',coorddata2,'GroupData',Gender)

输出结果为:

p2 = 
  ParallelCoordinatesPlot with properties:
              Data: [100x3 double]
    CoordinateData: [2 3]
         GroupData: {100x1 cell}
  Show all properties
p2.CoordinateTickLabels = {'Height','Weight'};
Matlab平行坐标图创建函数parallelplot

在绘图中更改数据归一化

根据停电数据表创建一个平行坐标图。更改数值坐标变量的归一化方法。

将停电数据以表形式读入工作区中。显示表的前几行。

outages = readtable('outages.csv');
head(outages)

输出结果为:

ans=8×6 table
       Region           OutageTime        Loss     Customers     RestorationTime            Cause       
    _____________    ________________    ______    __________    ________________    ___________________
    {'SouthWest'}    2002-02-01 12:18    458.98    1.8202e+06    2002-02-07 16:50    {'winter storm'   }
    {'SouthEast'}    2003-01-23 00:49    530.14    2.1204e+05                 NaT    {'winter storm'   }
    {'SouthEast'}    2003-02-07 21:15     289.4    1.4294e+05    2003-02-17 08:14    {'winter storm'   }
    {'West'     }    2004-04-06 05:44    434.81    3.4037e+05    2004-04-06 06:10    {'equipment fault'}
    {'MidWest'  }    2002-03-16 06:18    186.44    2.1275e+05    2002-03-18 23:23    {'severe storm'   }
    {'West'     }    2003-06-18 02:49         0             0    2003-06-18 10:54    {'attack'         }
    {'West'     }    2004-06-20 14:39    231.29           NaN    2004-06-20 19:16    {'equipment fault'}
    {'West'     }    2002-06-06 19:28    311.86           NaN    2002-06-07 00:51    {'equipment fault'}

创建一个名为 OutageDuration 的新变量,指示每次停电持续的时间。将 OutageDuration 转换为每次停电持续的天数。将该新变量添加到 outages 表中,并将其命名为 OutageDays。

OutageDuration = outages.RestorationTime - outages.OutageTime;
outages.OutageDays = days(OutageDuration);

使用 Loss、Customers 和 OutageDays 变量创建一个平行坐标图。由于坐标变量是数值,因此使用 ‘DataNormalization’ 和 ‘Jitter’ 名称-值对组参数将绘图中的值显示为 z 值,不使用任何抖动。

coordvars = {'Loss','Customers','OutageDays'};
p = parallelplot(outages,'CoordinateVariables',coordvars,'DataNormalization','zscore','Jitter',0);
Matlab平行坐标图创建函数parallelplot

OutageDays 变量包含一个偏离 OutageDays 均值超过 30 倍标准差的值和另一个偏离均值超过 10 倍标准差的值。将鼠标悬停在绘图中的值上以显示数据提示。每个数据提示表示与绘图中的线条对应的表行。

Matlab平行坐标图创建函数parallelplot

在 outages 表中查找具有刚才识别的 OutageDays 极值的行。您会注意到,这两次停电的 RestorationTime 值是不正常的。

outliers = outages([1011 269],:)

输出结果为:

outliers=2×7 table
       Region           OutageTime        Loss     Customers     RestorationTime            Cause            OutageDays
    _____________    ________________    ______    __________    ________________    ____________________    __________
    {'NorthEast'}    2009-08-20 02:46       NaN    1.7355e+05    2042-09-18 23:31    {'severe storm'    }       12083  
    {'MidWest'  }    2008-02-07 06:18    2378.7             0    2019-08-14 16:16    {'energy emergency'}      4206.4  

对绘图中坐标变量的类别重新排序

创建一个平行坐标图。对其中一个坐标变量的类别重新排序。

将停电数据以表形式读入工作区中。

outages = readtable('outages.csv');

使用表中的列的子集创建一个平行坐标图。根据导致停电的事件对绘图中的线条分组。

coordvars = [1 3 4 6];
p = parallelplot(outages,'CoordinateVariables',coordvars,'GroupVariable','Cause');
Matlab平行坐标图创建函数parallelplot

通过更新源表,更改 Cause 中事件的顺序。首先,将 Cause 转换为一个 categorical 变量,指定事件的新顺序,并使用 reordercats 函数创建一个名为 orderCause 的新变量。然后,在绘图的源表中,用新 orderCause 变量替换原来的 Cause 变量。

categoricalCause = categorical(p.SourceTable.Cause);
newOrder = {'attack','earthquake','energy emergency','equipment fault', ...
    'fire','severe storm','thunder storm','wind','winter storm','unknown'};
orderCause = reordercats(categoricalCause,newOrder);
p.SourceTable.Cause = orderCause;
Matlab平行坐标图创建函数parallelplot

由于 Cause 变量包含七个以上的类别,因此绘图中的一些组具有相同的颜色。通过更改 p 的 Color 属性,为每个组分配不同颜色。

p.Color = parula(10);
Matlab平行坐标图创建函数parallelplot

共计4人评分,平均4.3

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

文章目录

转载文章,原文出处:MathWorks官网,由古哥整理发布

如若转载,请注明出处:https://iymark.com/articles/878.html

(0)
微信公众号
古哥的头像古哥管理团队
上一篇 2020年11月20日 22:55
下一篇 2020年11月22日 14:16

你可能感兴趣的文章

发表回复

登录后才能评论
微信小程序
微信公众号