主要内容

向表和时间表中添加自定义属性

此示例说明如何向表和时间表中添加自定义属性、设置和访问属性值以及删除属性。

所有表和时间表都有一些包含有关这些表或其变量的元数据的属性。您可以通过 T.Properties 对象访问这些属性,其中 T 是表或时间表的名称。例如,T.Properties.VariableNames 返回一个元胞数组,其中包含 T 中变量的名称。

通过 T.Properties 访问的属性是 tabletimetable 数据类型定义的一部分。不能添加或删除这些预定义的属性。但您可以通过修改表或时间表的 T.Properties.CustomProperties 对象来添加和删除您自己的自定义属性。

添加属性

将电力中断数据读取到表中。使用包含日期和时间的第一个变量 OutageTime 对表进行排序。

T = readtable("outages.csv",TextType="string");
T = sortrows(T,"OutageTime")
T=1468×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"    
    "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"    
    "MidWest"      2002-03-26 01:59    388.04    5.6422e+05    2002-03-28 19:55    "winter storm"    
    "MidWest"      2002-04-20 16:46     23141           NaN                 NaT    "unknown"         
    "SouthWest"    2002-05-08 20:34    50.732         34481    2002-05-08 22:21    "thunder storm"   
    "MidWest"      2002-05-18 11:04    1389.1    1.3447e+05    2002-05-21 01:22    "unknown"         
    "NorthEast"    2002-05-20 10:57    9116.6    2.4983e+06    2002-05-21 15:22    "unknown"         
    "SouthEast"    2002-05-27 09:44    237.28    1.7101e+05    2002-05-27 16:19    "wind"            
    "SouthEast"    2002-06-02 16:11         0             0    2002-06-05 05:55    "energy emergency"
    "West"         2002-06-06 19:28    311.86           NaN    2002-06-07 00:51    "equipment fault" 
    "SouthEast"    2002-06-17 23:01    42.542         39877    2002-06-17 23:49    "thunder storm"   
    "MidWest"      2002-07-01 04:33    203.94         60650    2002-07-02 14:54    "severe storm"    
    "MidWest"      2002-07-01 08:18    100.71    1.8116e+05    2002-07-01 11:33    "severe storm"    
    "MidWest"      2002-07-10 01:49    168.02           NaN    2002-07-10 17:20    "equipment fault" 
    "SouthEast"    2002-07-14 21:32     90.83         60133    2002-07-14 23:53    "thunder storm"   
      ⋮

显示其属性。这些是所有表都有的通用属性。请注意,还有一个 CustomProperties 对象,但默认情况下它并没有任何属性。

T.Properties
ans = 
  TableProperties with properties:

             Description: ''
                UserData: []
          DimensionNames: {'Row'  'Variables'}
           VariableNames: {'Region'  'OutageTime'  'Loss'  'Customers'  'RestorationTime'  'Cause'}
           VariableTypes: ["string"    "datetime"    "double"    "double"    "datetime"    "string"]
    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: ["string"    "datetime"    "double"    "double"    "datetime"    "string"]
    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: ["string"    "datetime"    "double"    "double"    "datetime"    "string"]
    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 中的变量绘制为一个堆叠图。要仅绘制 LossCustomersRestorationTime 值,请使用 ToPlot 自定义属性作为第二个输入参量。

stackedplot(T,T.Properties.CustomProperties.ToPlot);

Figure contains an object of type stackedplot.

移动或删除表变量时,预定义属性和自定义属性都会重新排序,以使其值所对应的变量保持不变。在此示例中,ToPlot 自定义属性的值与标记要绘制的变量保持对齐,就像 VariableNames 预定义属性的值保持对齐一样。

删除 Customers 变量并显示属性。

T.Customers = [];
T.Properties
ans = 
  TableProperties with properties:

             Description: ''
                UserData: []
          DimensionNames: {'Row'  'Variables'}
           VariableNames: {'Region'  'OutageTime'  'Loss'  'RestorationTime'  'Cause'}
           VariableTypes: ["string"    "datetime"    "double"    "datetime"    "string"]
    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 移到第一个变量之前。请注意,属性已相应地进行了重新排序。RestorationTimeLoss 变量仍带有表示要在绘图中包含它们的指示符。

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"    "string"    "string"]
    VariableDescriptions: {}
           VariableUnits: {}
      VariableContinuity: []
                RowTimes: [1468×1 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 数据类型定义的一部分。

删除 OutputFileNameOutputFileType 自定义属性。显示其余的表属性。

T = rmprop(T,["OutputFileName" "OutputFileType"]);
T.Properties
ans = 
  TimetableProperties with properties:

             Description: ''
                UserData: []
          DimensionNames: {'OutageTime'  'Variables'}
           VariableNames: {'RestorationTime'  'Loss'  'Cause'  'Region'}
           VariableTypes: ["datetime"    "double"    "string"    "string"]
    VariableDescriptions: {}
           VariableUnits: {}
      VariableContinuity: []
                RowTimes: [1468×1 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]

另请参阅

| | | | | | | |

主题