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 会按照所有坐标变量在表中出现的顺序显示这些坐标变量。软件将在坐标标尺下方显示相应的坐标变量名称。

该绘图显示,表的前 8 行提供了 2015 年 1 月前 8 天的温度数据。例如,就日均温度而言,第 8 天是这 8 天中最寒冷的一天。

parallelplot(head(tbl))

5399fdcf68a1cb409bdadc384e53d4b8.png

为了帮助您解读绘图,默认情况下,MATLAB 会在绘图中沿坐标标尺随机抖动线条,使其不会完全重叠。例如,虽然前 8 个观测值具有相同的 Year 和 Month 值,但图中的线并没有完全对齐到 Year 坐标标尺的 2015 刻度线处,也没有完全对齐到 Month 坐标标尺的 January 刻度线处。虽然抖动会影响所有坐标变量,但它通常在分类坐标标尺上更加明显,因为抖动量取决于刻度线之间的距离。您可以设置 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';

0fc6c7b0ec89d7f4cd75ae50fe851cad.png

d46616063d839d2f469f6e891deac6be.png

对绘图线条分组

通过设置 GroupVariable 属性,根据 Year 值对绘图中的线条进行分组。默认情况下,MATLAB 会在绘图中添加一个图例。可以通过将 LegendVisible 属性设置为 'off' 来删除该图例。

p.GroupVariable = 'Year';

ccb4a5a2be587863fc1f2fb0b4a57102.png

交互式重排坐标变量

以交互方式重新排列坐标变量,以便更轻松地比较它们,并决定在绘图中保留哪些变量。

在图窗窗口中打开您的绘图。点击坐标刻度标签,并将关联的坐标标尺拖到您选择的位置。软件用一个黑色矩形来突出显示所选坐标标尺。例如,您可以点击 Month 坐标刻度标签,然后向右拖动坐标标尺。然后,您可以轻松比较 Month 和 TemperatureF 的值。

323fa358d5490181d92812f4dfc1597b.png

当您以交互方式重新排列坐标变量时,软件会更新绘图的相关 CoordinateTickLabels、CoordinateVariables 和 CoordinateData 属性。

有关更多交互选项,请参阅提示。

选择部分坐标变量

显示 p.SourceTable 中的部分坐标变量,并通过设置 p 的 CoordinateVariables 属性来指定它们在绘图中的顺序。

具体操作是从绘图中删除 Day 变量,并将 TemperatureF 变量(源表中的第四列)显示为绘图中的第二个坐标轴。

p.CoordinateVariables = [1 4 2];

46571c7593acac80acacf7f59e1dcb6a.png

您还可以通过下列方法设置 CoordinateVariables 属性:变量名称的字符串或元胞数组,或者以 true 元素表示选定变量的逻辑向量。

修改坐标变量中的类别

在绘图中显示 Month 中类别的一个子集,并更改坐标标尺上的类别顺序。

由于一些月份仅包含两年中的一年的数据,因此需要删除源表中与这些月份对应的行。MATLAB 会在源表更改后立即更新绘图。

uniqueMonth = {'September','October','November','December','August'};

uniqueMonthIdx = ismember(p.SourceTable.Month,uniqueMonth);

p.SourceTable(uniqueMonthIdx,:) = [];

41bc08f1e3ac0c5c4c1d8ba6515dd867.png

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

categoricalMonth = categorical(p.SourceTable.Month);

newOrder = {'January','February','March','April','May','June','July'};

orderMonth = reordercats(categoricalMonth,newOrder);

p.SourceTable.Month = orderMonth;

ca48aa47279d665fb6fcfe57f8da9ce0.png

基于分 bin 后的值对绘图线条分组

为了更好地可视化每个月内的温度范围,您可以使用 discretize 来对温度数据分 bin,并使用分 bin 后的值对绘图中的线条进行分组。查看源表中的最低和最高温度。设置 bin 边界,将这些值包含在内。

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);

将分 bin 后的温度添加到源表中。根据分 bin 后的温度数据,对绘图中的线条进行分组。

p.SourceTable.GroupTemperature = groupTemperature;

p.GroupVariable = 'GroupTemperature';

cf63e789b56206fd9b31f857a7e964f4.png

由于 GroupTemperature 包含的类别超过 7 个,因此绘图中的一些组具有相同的颜色。通过设置 Color 属性,为每个组指定不同的颜色。

p.Color = jet(8);

b2376e47508535f1663a1f33219d44f2.png

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值