向表和时间表中添加自定义属性
此示例说明如何向表和时间表中添加自定义属性、设置和访问属性值以及删除属性。
所有表和时间表都有一些包含有关这些表或其变量的元数据的属性。您可以通过 T
.Properties
对象访问这些属性,其中 T
是表或时间表的名称。例如,T
.Properties.VariableNames
返回一个元胞数组,其中包含 T
中变量的名称。
通过 T
.Properties
访问的属性是 table
和 timetable
数据类型定义的一部分。不能添加或删除这些预定义的属性。但是,从 R2018b 开始,您可以通过修改表或时间表的 T
.Properties.CustomProperties
对象来添加和删除您自己的自定义属性。
添加属性
将电力中断数据读取到表中。使用包含日期时间的第一个变量 OutageTime
对表进行排序。然后显示前三行。
T = readtable('outages.csv'); T = sortrows(T,'OutageTime'); head(T,3)
Region OutageTime Loss Customers RestorationTime Cause _____________ ________________ ______ __________ ________________ ________________ {'SouthWest'} 2002-02-01 12:18 458.98 1.8202e+06 2002-02-07 16:50 {'winter storm'} {'MidWest' } 2002-03-05 17:53 96.563 2.8666e+05 2002-03-10 14:41 {'wind' } {'MidWest' } 2002-03-16 06:18 186.44 2.1275e+05 2002-03-18 23:23 {'severe storm'}
显示其属性。这些是所有表都有的通用属性。请注意,还有一个 CustomProperties
对象,但默认情况下它并没有任何属性。
T.Properties
ans = TableProperties with properties: Description: '' UserData: [] DimensionNames: {'Row' 'Variables'} VariableNames: {'Region' 'OutageTime' 'Loss' 'Customers' 'RestorationTime' 'Cause'} VariableTypes: ["cell" "datetime" "double" "double" "datetime" "cell"] VariableDescriptions: {} VariableUnits: {} VariableContinuity: [] RowNames: {} CustomProperties: No custom properties are set. Use addprop and rmprop to modify CustomProperties.
要添加自定义属性,请使用 addprop
函数。指定属性的名称。对于每个属性,还要指定它是包含整个表的元数据(类似于 Description
属性),还是包含其变量的元数据(类似于 VariableNames
属性)。如果属性包含变量元数据,则其值必须是一个长度等于变量数的向量。
添加一些自定义属性,其中包含输出文件名、文件类型以及表示要绘制哪些变量的指示符。最佳做法是将输入表指定为 addprop
的输出参量,使自定义属性成为同一个表的一部分。使用 'table'
选项指定输出文件名和文件类型为表元数据。使用 'variable'
选项指定绘图指示符为变量元数据。
T = addprop(T,{'OutputFileName','OutputFileType','ToPlot'}, ... {'table','table','variable'}); T.Properties
ans = TableProperties with properties: Description: '' UserData: [] DimensionNames: {'Row' 'Variables'} VariableNames: {'Region' 'OutageTime' 'Loss' 'Customers' 'RestorationTime' 'Cause'} VariableTypes: ["cell" "datetime" "double" "double" "datetime" "cell"] VariableDescriptions: {} VariableUnits: {} VariableContinuity: [] RowNames: {} Custom Properties (access using t.Properties.CustomProperties.<name>): OutputFileName: [] OutputFileType: [] ToPlot: []
设置和访问自定义属性值
使用 addprop
添加自定义属性时,默认情况下它们的值为空数组。您可以使用圆点语法设置和访问自定义属性的值。
设置输出文件名和类型。这些属性包含表的元数据。然后为 ToPlot
属性指定一个逻辑数组。此属性包含变量的元数据。在以下示例中,对于要包含在图中的每个变量,ToPlot
属性值的元素为 true
,对于要排除的每个变量,则为 false
。
T.Properties.CustomProperties.OutputFileName = 'outageResults'; T.Properties.CustomProperties.OutputFileType = '.mat'; T.Properties.CustomProperties.ToPlot = [false false true true true false]; T.Properties
ans = TableProperties with properties: Description: '' UserData: [] DimensionNames: {'Row' 'Variables'} VariableNames: {'Region' 'OutageTime' 'Loss' 'Customers' 'RestorationTime' 'Cause'} VariableTypes: ["cell" "datetime" "double" "double" "datetime" "cell"] VariableDescriptions: {} VariableUnits: {} VariableContinuity: [] RowNames: {} Custom Properties (access using t.Properties.CustomProperties.<name>): OutputFileName: 'outageResults' OutputFileType: '.mat' ToPlot: [0 0 1 1 1 0]
使用 stackedplot
函数将 T
中的变量绘制为一个堆叠图。要仅绘制 Loss
、Customers
和 RestorationTime
值,请使用 ToPlot
自定义属性作为第二个输入参量。
stackedplot(T,T.Properties.CustomProperties.ToPlot);
移动或删除表变量时,预定义属性和自定义属性都会重新排序,以使其值所对应的变量保持不变。在此示例中,ToPlot
自定义属性的值与标记要绘制的变量保持对齐,就像 VariableNames
预定义属性的值保持对齐一样。
删除 Customers
变量并显示属性。
T.Customers = []; T.Properties
ans = TableProperties with properties: Description: '' UserData: [] DimensionNames: {'Row' 'Variables'} VariableNames: {'Region' 'OutageTime' 'Loss' 'RestorationTime' 'Cause'} VariableTypes: ["cell" "datetime" "double" "datetime" "cell"] VariableDescriptions: {} VariableUnits: {} VariableContinuity: [] RowNames: {} Custom Properties (access using t.Properties.CustomProperties.<name>): OutputFileName: 'outageResults' OutputFileType: '.mat' ToPlot: [0 0 1 1 0]
将表转换为时间表,使用电力中断时间作为行时间。使用 movevars
函数将 Region
移到表的末尾,将 RestorationTime
移到第一个变量之前。请注意,属性已相应地进行了重新排序。RestorationTime
和 Loss
变量仍带有表示要在绘图中包含它们的指示符。
T = table2timetable(T); T = movevars(T,'Region','After','Cause'); T = movevars(T,'RestorationTime','Before',1); T.Properties
ans = TimetableProperties with properties: Description: '' UserData: [] DimensionNames: {'OutageTime' 'Variables'} VariableNames: {'RestorationTime' 'Loss' 'Cause' 'Region'} VariableTypes: ["datetime" "double" "cell" "cell"] VariableDescriptions: {} VariableUnits: {} VariableContinuity: [] RowTimes: [1468x1 datetime] StartTime: 2002-02-01 12:18 SampleRate: NaN TimeStep: NaN Events: [] Custom Properties (access using t.Properties.CustomProperties.<name>): OutputFileName: 'outageResults' OutputFileType: '.mat' ToPlot: [1 1 0 0]
删除属性
您可以使用 rmprop
函数删除表的任何或所有自定义属性。但是,不能使用它删除 T.Properties
中的预定义属性,因为这些属性是 table
数据类型定义的一部分。
删除 OutputFileName
和 OutputFileType
自定义属性。显示其余的表属性。
T = rmprop(T,{'OutputFileName','OutputFileType'}); T.Properties
ans = TimetableProperties with properties: Description: '' UserData: [] DimensionNames: {'OutageTime' 'Variables'} VariableNames: {'RestorationTime' 'Loss' 'Cause' 'Region'} VariableTypes: ["datetime" "double" "cell" "cell"] VariableDescriptions: {} VariableUnits: {} VariableContinuity: [] RowTimes: [1468x1 datetime] StartTime: 2002-02-01 12:18 SampleRate: NaN TimeStep: NaN Events: [] Custom Properties (access using t.Properties.CustomProperties.<name>): ToPlot: [1 1 0 0]
另请参阅
readtable
| table
| head
| addprop
| table2timetable
| movevars
| rmprop
| sortrows
| stackedplot