今天,给各位系统的介绍下 Matlab 中使用 stackedplot 绘图中的常见方法,即具有相同变量的多组数据以堆叠的方式绘制图片的方法,主要包括绘制时间表变量、指定变量、重新排列变量、使用一个 Y 轴绘制多个变量、绘制矩阵的列、使用名称-值对组指定标题和标签、将单个绘图改为散点图和阶梯图等常见用法。
下面我们将开始非常详细的 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)
指定变量
根据患者数据创建一个表。显示前三行。
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×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'})
还有其他方法可以对变量进行重新排序。
- 按在表中的数字顺序指定它们: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)
绘制矩阵的列
创建一个数值矩阵和一个数值向量。
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)
使用名称-值对组指定标题和标签
加载具有一组天气测量值的时间表。显示其前三行。
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)
将单个绘图改为散点图和阶梯图
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)
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=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';
您还可以通过 s.AxesProperties 属性访问单个 y 轴。
s.AxesProperties
ans=3×1 object
3x1 StackedAxesProperties array with properties:
YLimits
LegendLabels
LegendLocation
LegendVisible
转载文章,原文出处:MathWorks官网,由古哥整理发布
如若转载,请注明出处:https://iymark.com/articles/536.html