本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

stackedplot

具有公共 x 轴的几个变量的堆叠图

说明

示例

s = stackedplot(tbl) 在堆叠图中绘制表或时间表的变量,并返回 StackedLineChart 对象。创建堆叠图后,可以使用 s 更改堆叠图的属性。有关属性列表,请参阅 StackedLineChart 属性

该函数在垂直层叠的单独 y 轴中绘制变量。这些变量共享一个公共 x 轴。

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

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

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

示例

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

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

示例

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

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

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

示例

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

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

示例

全部折叠

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

tbl = readtable('outages.csv');
tbl = table2timetable(tbl);
head(tbl,5)
ans=5×6 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'   

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

tbl = sortrows(tbl);
head(tbl,5)
ans=5×6 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 函数绘制来自 LossCustomersRestorationTime 变量的值,其中每个变量沿它自己的 y 轴绘制。但是,该绘图不包含 RegionCause 变量,因为它们包含不能绘制的数据。

s = stackedplot(tbl);

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

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

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

tbl = readtable('outages.csv');
tbl = table2timetable(tbl);
tbl = sortrows(tbl);
head(tbl,3)
ans=3×6 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'});

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

  • 按在表中的数字顺序指定它们:stackedplot(tbl,[4 2 3]);

  • StackedLineChart 对象的 DisplayVariables 属性中的值重新排序:s = stackedplot(tbl); s.DisplayVariables = {'RestorationTime','Loss','Customers'}

使用 WeightSystolicDiastolic 变量基于患者数据的子集创建一个表。

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 轴绘制 SystolicDiastolic。要将这些变量一起绘制,请在嵌套元胞数组中指定它们。

vars = {{'Systolic','Diastolic'},'Weight'}
vars = 1x2 cell array
    {1x2 cell}    {'Weight'}

stackedplot(tbl,vars);

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

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

使用 XY 创建一个堆叠图。

stackedplot(X,Y);

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

load outdoors
outdoors(1:3,:)
ans=3×4 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);

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

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

load outdoors
outdoors(1:3,:)
ans=3×4 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)

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;

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

s.LineProperties
ans = 
  3x1 StackedLineProperties array with properties:

    Color
    MarkerFaceColor
    MarkerEdgeColor
    LineStyle
    LineWidth
    Marker
    MarkerSize
    PlotType

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

s.LineProperties(2).PlotType = 'scatter';
s.LineProperties(3).PlotType = 'stairs';

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

s.AxesProperties
ans = 
  3x1 StackedAxesProperties array with properties:

    YLimits
    LegendLabels
    LegendLocation
    LegendVisible

输入参数

全部折叠

输入表或时间表。

输入表中的变量,指定为字符向量元胞数组、字符串数组、数值数组或逻辑数组。

如果 vars 是元胞数组,它也可以是嵌套的元胞数组。stackedplot 函数在同一 y 轴中绘制嵌套元胞中指定的所有变量。

包含 x 值的表变量,指定为字符向量、字符串标量、整数或逻辑数组。

仅当输入参数 tbl 是表而不是时间表时,才能指定 xvar

x 值,指定为数值、日期时间、持续时间或逻辑向量。X 的长度必须等于 Y 的行数。

y 值,指定为数值、日期时间、持续时间、分类或逻辑数组。stackedplot 函数在单独的 y 轴中绘制每列。

线型、标记和颜色,指定为包含符号的字符向量或字符串标量。符号可以按任意顺序显示。您不需要同时指定所有三个特征(线型、标记和颜色)。例如,如果忽略线型,只指定标记,则绘图只显示标记,不显示线条。

示例: '--or' 是带有圆形标记的红色虚线

线型说明
-实线(默认)
--虚线
:点线
-.点划线
标记说明
o圆圈
+加号
*星号
.
x叉号
s方形
d菱形
^上三角
v下三角
>右三角
<左三角
p五角形
h六角形
颜色说明

y

黄色

m

品红色

c

青蓝色

r

红色

g

绿色

b

蓝色

w

白色

k

黑色

要在其中绘图的父容器,指定为 FigurePanelTab 对象。

名称-值对组参数

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在引号中。您可采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,...,NameN,ValueN 所示。

示例: 'Marker','o','MarkerSize',10

此处列出的堆叠图线条属性仅是适用于所有堆叠图的一个公共子集,无论数据源是表还是数组。有关完整列表,请参阅 StackedLineChart 属性

线条颜色,指定为 RGB 三元组、十六进制颜色代码或第一个表中列出的颜色选项之一。

对于自定义颜色,请指定 RGB 三元组或十六进制颜色代码。

  • RGB 三元组是包含三个元素的行向量,其元素分别指定颜色中红、绿、蓝分量的强度。强度值必须位于 [0,1] 范围内,例如 [0.4 0.6 0.7]

  • 十六进制颜色代码是字符向量或字符串标量,以井号 (#) 开头,后跟三个或六个十六进制数字,范围可以是 0F。这些值不区分大小写。因此,颜色代码 '#FF8800''#ff8800''#F80''#f80' 是等效的。

此外,还可以按名称指定一些常见的颜色。下表列出了命名颜色选项、等效 RGB 三元组和十六进制颜色代码。

颜色名称短名称RGB 三元组十六进制颜色代码外观
'red''r'[1 0 0]'#FF0000'

'green''g'[0 1 0]'#00FF00'

'blue''b'[0 0 1]'#0000FF'

'cyan' 'c'[0 1 1]'#00FFFF'

'magenta''m'[1 0 1]'#FF00FF'

'yellow''y'[1 1 0]'#FFFF00'

'black''k'[0 0 0]'#000000'

'white''w'[1 1 1]'#FFFFFF'

'none'不适用不适用不适用无颜色

以下是 MATLAB® 在许多类型的绘图中使用的默认颜色的 RGB 三元组和十六进制颜色代码。

RGB 三元组十六进制颜色代码外观
[0 0.4470 0.7410]'#0072BD'

[0.8500 0.3250 0.0980]'#D95319'

[0.9290 0.6940 0.1250]'#EDB120'

[0.4940 0.1840 0.5560]'#7E2F8E'

[0.4660 0.6740 0.1880]'#77AC30'

[0.3010 0.7450 0.9330]'#4DBEEE'

[0.6350 0.0780 0.1840]'#A2142F'

示例: 'blue'

示例: [0 0 1]

示例: '#0000FF'

线型,指定为下表中列出的选项之一。

线型说明表示的线条
'-'实线

'--'虚线

':'点线

'-.'点划线

'none'无线条无线条

线宽,指定为以磅为单位的正值,其中 1 磅 = 1/72 英寸。如果该线条具有标记,则线条宽度也会影响标记边。

标记符号,指定为下表中的标记之一。默认情况下,堆叠图线条没有标记。通过指定标记符号沿该线条上的每个数据点添加标记。

说明
'o'圆圈
'+'加号
'*'星号
'.'
'x'叉号
'square''s'方形
'diamond''d'菱形
'^'上三角
'v'下三角
'>'右三角
'<'左三角
'pentagram''p'五角星(五角形)
'hexagram''h'六角星(六角形)
'none'无标记

示例: 'Marker','+'

示例: 'Marker','diamond'

标记大小,指定为以磅为单位的正值,其中 1 磅 = 1/72 英寸。

提示

  • 要以交互方式浏览堆叠图中的数据,请使用下列功能。

    • 缩放 - 使用滚轮进行缩放。

    • 平移 - 点击并拖动堆叠图以跨 x 值平移。

    • 数据游标 - 将鼠标悬停在某个位置上,以显示每个绘图的 y 值。

在 R2018b 中推出