Matlab公共轴堆叠绘图函数stackedplot

4
(4)

今天,给各位系统的介绍下 Matlab 中使用 stackedplot 绘图中的常见方法,即具有相同变量的多组数据以堆叠的方式绘制图片的方法,主要包括绘制时间表变量、指定变量、重新排列变量、使用一个 Y 轴绘制多个变量、绘制矩阵的列、使用名称-值对组指定标题和标签、将单个绘图改为散点图和阶梯图等常见用法。

Matlab公共轴堆叠绘图函数stackedplot

下面我们将开始非常详细的 Matlab errorbar 函数语法介绍,实例引用,结果展示。遗憾的是,我的Matlab 2016版本中,没有这个绘图函数,所以无法提供帮助文件。这里,只能直接把官方给的文档完全转载过来了,这篇文章中的代码大部分都无法在2016版本中运行,几乎全是新函数(官方为2020版Matlab)

常用语法

stackedplot(tbl)
stackedplot(tbl,vars)
stackedplot(___,'XVariable',xvar)
stackedplot(X,Y)
stackedplot(Y)
stackedplot(___,LineSpec)
stackedplot(___,Name,Value)
stackedplot(parent,___)
s = stackedplot(___)

语法说明

stackedplot(tbl) 在堆叠图中绘制表或时间表的变量。该函数在垂直层叠的单独 y 轴中绘制变量。这些变量共享一个公共 x 轴。

  • 如果 tbl 是表,则该函数绘制变量对行号的图。
  • 如果 tbl 是时间表,则该函数绘制变量对行时间的图。

stackedplot 函数绘制 tbl 的所有数值、逻辑、分类、日期时间和持续时间变量,并忽略具有任何其他数据类型的表变量。

stackedplot(tbl,vars) 仅绘制 vars 指定的表或时间表变量。

stackedplot(___,’XVariable’,xvar) 指定为堆叠图提供 x 值的表变量。此语法仅支持表,而不支持时间表。

stackedplot(X,Y) 绘制 Y 列对向量 X 的图。

stackedplot(Y) 绘制 Y 的列对其行号的图。x 轴的刻度范围是从 1 到 Y 的行数。

stackedplot(___,LineSpec) 设置线型、标记符号和颜色。您可以将此语法与前面任何语法中的输入参数结合使用。

stackedplot(___,Name,Value) 使用一个或多个 Name,Value 对组参数设置堆叠图的属性。有关属性列表,请参阅 StackedLineChart 属性。可以将此选项与前面语法中的任何输入参数组合一起使用。名称-值对组设置应用于堆叠图中的所有绘图。将每个属性名称括在引号中。

stackedplot(parent,___) 在 parent 指定的图窗、面板或选项卡中创建堆叠图。选项 parent 可以位于前面的语法中的任何输入参数组合之前。

s = stackedplot(___) 返回 StackedLineChart 对象。创建堆叠图后,可以使用 s 更改堆叠图的属性。

绘制时间表变量

将电子表格中的数据读取到一个表中。然后将该表转换为时间表。包含日期和时间的第一个变量 OutageTime 提供时间表的行时间。显示前五行。

tbl = readtable('outages.csv');
tbl = table2timetable(tbl);
head(tbl,5)
<pre class="EnlighterJSRAW" data-enlighter-language="matlab" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">ans=5×5 timetable
       OutageTime          Region         Loss     Customers     RestorationTime            Cause       
    ________________    _____________    ______    __________    ________________    ___________________
    2002-02-01 12:18    {'SouthWest'}    458.98    1.8202e+06    2002-02-07 16:50    {'winter storm'   }
    2003-01-23 00:49    {'SouthEast'}    530.14    2.1204e+05                 NaT    {'winter storm'   }
    2003-02-07 21:15    {'SouthEast'}     289.4    1.4294e+05    2003-02-17 08:14    {'winter storm'   }
    2004-04-06 05:44    {'West'     }    434.81    3.4037e+05    2004-04-06 06:10    {'equipment fault'}
    2002-03-16 06:18    {'MidWest'  }    186.44    2.1275e+05    2002-03-18 23:23    {'severe storm'   }
</pre>

对时间表进行排序,使其行时间按顺序排列。时间表的行时间不需要按顺序排列。但是,如果将行时间用作绘图的 x 轴,则最好确保时间表按行时间排序。

tbl = sortrows(tbl);
head(tbl,5)
ans=5×5 timetable
       OutageTime          Region         Loss     Customers     RestorationTime          Cause      
    ________________    _____________    ______    __________    ________________    ________________
    2002-02-01 12:18    {'SouthWest'}    458.98    1.8202e+06    2002-02-07 16:50    {'winter storm'}
    2002-03-05 17:53    {'MidWest'  }    96.563    2.8666e+05    2002-03-10 14:41    {'wind'        }
    2002-03-16 06:18    {'MidWest'  }    186.44    2.1275e+05    2002-03-18 23:23    {'severe storm'}
    2002-03-26 01:59    {'MidWest'  }    388.04    5.6422e+05    2002-03-28 19:55    {'winter storm'}
    2002-04-20 16:46    {'MidWest'  }     23141           NaN                 NaT    {'unknown'     }

基于 tbl 创建数据的一个堆叠图。行时间 OutageTime 提供沿 x 轴的值。stackedplot 函数绘制来自 Loss、Customers 和 RestorationTime 变量的值,其中每个变量沿它自己的 y 轴绘制。但是,该绘图不包含 Region 和 Cause 变量,因为它们包含不能绘制的数据。

stackedplot(tbl)
Matlab公共轴堆叠绘图函数stackedplot

指定变量

根据患者数据创建一个表。显示前三行。

tbl = readtable('patients.xls');
head(tbl,3)
ans=3×10 table
      LastName        Gender      Age              Location               Height    Weight    Smoker    Systolic    Diastolic    SelfAssessedHealthStatus
    ____________    __________    ___    _____________________________    ______    ______    ______    ________    _________    ________________________
    {'Smith'   }    {'Male'  }    38     {'County General Hospital'  }      71       176      true        124          93             {'Excellent'}      
    {'Johnson' }    {'Male'  }    43     {'VA Hospital'              }      69       163      false       109          77             {'Fair'     }      
    {'Williams'}    {'Female'}    38     {'St. Mary's Medical Center'}      64       131      false       125          83             {'Good'     }      

仅绘制表中的四个变量。

stackedplot(tbl,{'Height','Weight','Systolic','Diastolic'})
Matlab公共轴堆叠绘图函数stackedplot

重新排列变量

创建一个时间表并显示其前三行。

tbl = readtable('outages.csv');
tbl = table2timetable(tbl);
tbl = sortrows(tbl);
head(tbl,3)
ans=3×5 timetable
       OutageTime          Region         Loss     Customers     RestorationTime          Cause      
    ________________    _____________    ______    __________    ________________    ________________
    2002-02-01 12:18    {'SouthWest'}    458.98    1.8202e+06    2002-02-07 16:50    {'winter storm'}
    2002-03-05 17:53    {'MidWest'  }    96.563    2.8666e+05    2002-03-10 14:41    {'wind'        }
    2002-03-16 06:18    {'MidWest'  }    186.44    2.1275e+05    2002-03-18 23:23    {'severe storm'}

通过以与表中的顺序不同的顺序指定变量,对变量重新排序。例如,RestorationTime 是时间表中可以绘制的最后一个变量。默认情况下,stackedplot 将其放置在绘图的底部。但是,您可以对变量重新排序以将 RestorationTime 放在顶部。

stackedplot(tbl,{'RestorationTime','Loss','Customers'})
Matlab公共轴堆叠绘图函数stackedplot

还有其他方法可以对变量进行重新排序。

  • 按在表中的数字顺序指定它们:stackedplot(tbl,[4 2 3]);
  • 返回一个 StackedLineChart 对象,并对其 DisplayVariables 属性中的值重新排序:s = stackedplot(tbl); s.DisplayVariables = {‘RestorationTime’,’Loss’,’Customers’}

使用一个 Y 轴绘制多个变量

使用 Weight、Systolic 和 Diastolic 变量基于患者数据的子集创建一个表。

load patients
tbl = table(Weight,Systolic,Diastolic);
head(tbl,3)
ans=3×3 table
    Weight    Systolic    Diastolic
    ______    ________    _________
     176        124          93    
     163        109          77    
     131        125          83    

创建一个堆叠图,使用相同的 y 轴绘制 Systolic 和 Diastolic。要将这些变量一起绘制,请在嵌套元胞数组中指定它们。

vars = {{'Systolic','Diastolic'},'Weight'}
vars=1×2 cell array
    {1x2 cell}    {'Weight'}
stackedplot(tbl,vars)
Matlab公共轴堆叠绘图函数stackedplot

绘制矩阵的列

创建一个数值矩阵和一个数值向量。

X = [0:4:20]
X = 1×6
     0     4     8    12    16    20
Y = randi(100,6,3)
Y = 6×3
    82    28    96
    91    55    49
    13    96    81
    92    97    15
    64    16    43
    10    98    92

使用 X 和 Y 创建一个堆叠图。

stackedplot(X,Y)
Matlab公共轴堆叠绘图函数stackedplot

使用名称-值对组指定标题和标签

加载具有一组天气测量值的时间表。显示其前三行。

load outdoors
outdoors(1:3,:)
ans=3×3 timetable
           Time            Humidity    TemperatureF    PressureHg
    ___________________    ________    ____________    __________
    2015-11-15 00:00:24        49          51.3          29.61   
    2015-11-15 01:30:24      48.9          51.5          29.61   
    2015-11-15 03:00:24      48.9          51.5          29.61   

创建一个堆叠图。使用名称-值对组参数指定 y 轴的标题和标签。您可以使用名称-值对组来更改任何属性的默认值。(另请注意,您可以使用 char(176) 指定度符号。)

degreeSymbol = char(176);
newYlabels = {'RH (%)',['T (' degreeSymbol 'F)'],'P (in Hg)'};
stackedplot(outdoors,'Title','Weather Data','DisplayLabels',newYlabels)
Matlab公共轴堆叠绘图函数stackedplot

将单个绘图改为散点图和阶梯图

stackedplot 函数返回 StackedLineChart 对象。您可以使用它为所有绘图设置相同的属性值,或为单个绘图设置不同属性值。在此示例中,首先更改堆叠图中所有绘图的线宽。然后,使用单个绘图的 PlotType 属性,以便堆叠图具有线图、散点图和阶梯图。

加载具有一组天气测量值的时间表。

load outdoors
outdoors(1:3,:)
ans=3×3 timetable
           Time            Humidity    TemperatureF    PressureHg
    ___________________    ________    ____________    __________
    2015-11-15 00:00:24        49          51.3          29.61   
    2015-11-15 01:30:24      48.9          51.5          29.61   
    2015-11-15 03:00:24      48.9          51.5          29.61   

创建一个堆叠图并返回 StackedLineChart 对象。

s = stackedplot(outdoors)
Matlab公共轴堆叠绘图函数stackedplot
s = 
  StackedLineChart with properties:
         SourceTable: [51x3 timetable]
    DisplayVariables: {'Humidity'  'TemperatureF'  'PressureHg'}
               Color: [0 0.4470 0.7410]
           LineStyle: '-'
           LineWidth: 0.5000
              Marker: 'none'
          MarkerSize: 6
  Show all properties

该对象提供对应用于所有绘图的许多属性的访问权限。例如,您可以使用 s.LineWidth 使线条更宽。

s.LineWidth = 2;
Matlab公共轴堆叠绘图函数stackedplot

该对象还提供对某些对象数组的访问权限,这些对象数组可用于修改单个绘图的线条和 y 轴。要访问单个线条的属性,请使用 s.LineProperties。对于每个绘图,您可以指定不同线型、标记、绘图类型等。

s.LineProperties
ans=3×1 object
  3x1 StackedLineProperties array with properties:
    Color
    MarkerFaceColor
    MarkerEdgeColor
    LineStyle
    LineWidth
    Marker
    MarkerSize
    PlotType

使用 PlotType 属性将第二个绘图更改为散点图,将第三个绘图更改为阶梯图。

s.LineProperties(2).PlotType = 'scatter';
s.LineProperties(3).PlotType = 'stairs';
Matlab公共轴堆叠绘图函数stackedplot

您还可以通过 s.AxesProperties 属性访问单个 y 轴。

s.AxesProperties
ans=3×1 object
  3x1 StackedAxesProperties array with properties:
    YLimits
    LegendLabels
    LegendLocation
    LegendVisible

共计4人评分,平均4

到目前为止还没有投票~

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

让我们改善这篇文章!

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

文章目录

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

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

(0)
微信公众号
古哥的头像古哥管理团队
上一篇 2020年10月23日 19:52
下一篇 2020年10月24日 12:25

你可能感兴趣的文章

发表回复

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