stem
Plot discrete sequence data
Syntax
Description
Vector and Matrix Data
stem(
plots the
data sequence, Y
)Y
, as stems that extend from a baseline
along the xaxis. The data values are indicated
by circles terminating each stem.
If
Y
is a vector, then the xaxis scale ranges from 1 tolength(Y)
.If
Y
is a matrix, thenstem
plots all elements in a row against the same x value, and the xaxis scale ranges from 1 to the number of rows inY
.
stem(
plots
the data sequence, X
,Y
)Y
, at values specified by X
.
The X
and Y
inputs must be vectors
or matrices of the same size. Additionally, X
can
be a row or column vector and Y
must be a matrix
with length(X)
rows.
If
X
andY
are both vectors, thenstem
plots entries inY
against corresponding entries inX
.If
X
is a vector andY
is a matrix, thenstem
plots each column ofY
against the set of values specified byX
, such that all elements in a row ofY
are plotted against the same value.If
X
andY
are both matrices, thenstem
plots columns ofY
against corresponding columns ofX
.
stem(___,
fills the circles.
Use this option with any of the input argument combinations in the previous
syntaxes."filled"
)
Table Data
stem(
plots the specified variable from the table against the row indices of the
table. If the table is a timetable, the specified variable is plotted against
the row times of the timetable. To plot one set of yvalues,
specify one variable for tbl
,yvar
)yvar
. To plot multiple sets of
yvalues, specify multiple variables for
yvar
. (since
R2022b)
Additional Options
stem(___,
modifies the stem chart using one or more Name,Value
)Name,Value
pair
arguments.
stem(
plots into
the axes specified by ax
,___)ax
instead of into the current axes
(gca
). The option, ax
, can precede any
of the input argument combinations in the previous syntaxes.
Examples
Plot Single Data Series
Create a stem plot of 50 data values between $$2\pi $$ and $$2\pi $$.
figure Y = linspace(2*pi,2*pi,50); stem(Y)
Data values are plotted as stems extending from the baseline and terminating at the data value. The length of Y
automatically determines the position of each stem on the xaxis.
Plot Multiple Data Series
Plot two data series using a twocolumn matrix.
figure X = linspace(0,2*pi,50)'; Y = [cos(X), 0.5*sin(X)]; stem(Y)
Each column of Y
is plotted as a separate series, and entries in the same row of Y
are plotted against the same x value. The number of rows in Y
automatically generates the position of each stem on the xaxis.
Plot Single Data Series at Specified x values
Plot 50 data values of cosine evaluated between 0 and $$2\pi $$ and specify the set of x values for the stem plot.
figure X = linspace(0,2*pi,50)'; Y = cos(X); stem(X,Y)
The first vector input determines the position of each stem on the xaxis.
Plot Multiple Data Series at Specified x values
Plot 50 data values of sine and cosine evaluated between 0 and $$2\pi $$ and specify the set of x values for the stem plot.
figure X = linspace(0,2*pi,50)'; Y = [cos(X), 0.5*sin(X)]; stem(X,Y)
The vector input determines the xaxis positions for both data series.
Plot Multiple Data Series at Unique Sets of x values
Plot 50 data values of sine and cosine evaluated at different sets of x values. Specify the corresponding sets of x values for each series.
figure x1 = linspace(0,2*pi,50)'; x2 = linspace(pi,3*pi,50)'; X = [x1, x2]; Y = [cos(x1), 0.5*sin(x2)]; stem(X,Y)
Each column of X
is plotted against the corresponding column of Y
.
Fill in Plot Markers
Create a stem plot and fill in the circles that terminate each stem.
X = linspace(0,10,20)';
Y = (exp(0.25*X));
stem(X,Y,'filled')
Specify Stem and Marker Options
Create a stem plot and set the line style to a dotted line, the marker symbols to diamonds, and the color to red using the LineSpec
option.
figure
X = linspace(0,2*pi,50)';
Y = (exp(X).*sin(X));
stem(X,Y,':diamondr')
To color the inside of the diamonds, use the 'fill'
option.
Specify Additional Stem and Marker Options
Create a stem plot and set the line style to a dotdashed line, the marker face color to red, and the marker edge color to green using Name,Value
pair arguments.
figure X = linspace(0,2*pi,25)'; Y = (cos(2*X)); stem(X,Y,'LineStyle','.',... 'MarkerFaceColor','red',... 'MarkerEdgeColor','green')
The stem remains the default color.
Plot Data from a Table
Since R2022b
A convenient way to plot data from a table is to pass the table to the stem
function and specify the variables to plot.
Read the first 100 rows and 7 columns of weather.csv
as a timetable tbl
. Then display the first three rows of the table.
tbl = readtimetable("weather.csv","Range",[1 1 101 7]); head(tbl,3)
Time WindDirection WindSpeed Humidity Temperature RainInchesPerMinute CumulativeRainfall ____________________ _____________ _________ ________ ___________ ___________________ __________________ 25Oct2021 00:00:09 46 1 84 49.2 0 0 25Oct2021 00:01:09 45 1.6 84 49.2 0 0 25Oct2021 00:02:09 36 2.2 84 49.2 0 0
Plot the row times on the xaxis and the CumulativeRainfall
variable on the yaxis. When you plot data from a timetable, the row times are plotted on the xaxis by default. Thus, you do not need to specify the Time
variable. Return the Stem
object as h
. Notice that the axis labels match the variable names.
h = stem(tbl,"CumulativeRainfall");
Change the color of the plot to purple by setting the Color
property.
h.Color = [0.5 0 0.8];
Plot Multiple Table Variables on One Axis
Since R2022b
Create vectors x
, y1
, and y2
, and use them to create a table. Plot the y1
and y2 variables against the x
variable, and use the axis padded
command so that the stems do not overlap with the plot box. Then add a legend, and notice that the legend labels match the table variable names.
x = (0:0.1:2.9)'; y1 = cos(x); y2 = sin(x); tbl = table(x,y1,y2); stem(tbl,"x",["y1","y2"]); % Pad axes and add a legend axis padded legend
Alternatively, you can omit the x
variable and plot the y1
and y2
variables against the row indices of the table.
stem(tbl,["y1","y2"]); axis padded legend
Specify Axes for Stem Plot
Since R2019b
You can display a tiling of plots using the tiledlayout
and nexttile
functions. Call the tiledlayout
function to create a 2by1 tiled chart layout. Call the nexttile
function to create the axes objects ax1
and ax2
. Create separate stem plots in the axes by specifying the axes object as the first argument to stem
.
x = 0:25; y1 = exp(0.1*x); y2 = exp(.05*x); tiledlayout(2,1) % Top plot ax1 = nexttile; stem(ax1,x,y1) % Bottom plot ax2 = nexttile; stem(ax2,x,y2)
Modify Stem Series After Creation
Create a 3D stem plot and return the stem series object.
X = linspace(0,2);
Y = X.^3;
Z = exp(X).*cos(Y);
h = stem3(X,Y,Z,'filled');
Change the color to magenta and set the marker face color to yellow. Use view
to adjust the angle of the axes in the figure. Use dot notation to set properties.
h.Color = 'm'; h.MarkerFaceColor = 'y'; view(10,35)
Adjust Baseline Properties
Create a stem plot and change properties of the baseline.
X = linspace(0,2*pi,50); Y = exp(0.3*X).*sin(3*X); h = stem(X,Y);
Change the line style of the baseline. Use dot notation to set properties.
hbase = h.BaseLine;
hbase.LineStyle = '';
Hide the baseline by setting its Visible
property to 'off'
.
hbase.Visible = 'off';
Change Baseline Level
Create a stem plot with a baseline level at 2.
X = linspace(0,2*pi,50)';
Y = (exp(0.3*X).*sin(3*X));
stem(X,Y,'BaseValue',2);
Input Arguments
Y
— Data sequence to display
vector or matrix
Data sequence to display, specified as a vector or matrix. When Y
is
a vector, stem
creates one Stem
object.
When Y
is a matrix, stem
creates
a separate Stem
object for each column.
Data Types: single
 double
 int8
 int16
 int32
 int64
 uint8
 uint16
 uint32
 uint64
 categorical
 datetime
 duration
X
— Locations to plot data values in Y
vector or matrix
Locations to plot data values in Y
, specified
as a vector or matrix. When Y
is a vector, X
must
be a vector of the same size. When Y
is a matrix, X
must
be a matrix of the same size, or a vector whose length equals the
number of rows in Y
.
Data Types: single
 double
 int8
 int16
 int32
 int64
 uint8
 uint16
 uint32
 uint64
 categorical
 datetime
 duration
LineSpec
— Line style, marker, and color
string scalar  character vector
Line style, marker, and color, specified as a string scalar or character vector containing symbols. The symbols can appear in any order. You do not need to specify all three characteristics (line style, marker, and color). For example, if you omit the line style and specify the marker, then the plot shows only the marker and no line.
Example: "or"
is a red dashed line with circle markers.
Line Style  Description  Resulting Line 

""  Solid line 

""  Dashed line 

":"  Dotted line 

"."  Dashdotted line 

Marker  Description  Resulting Marker 

"o"  Circle 

"+"  Plus sign 

"*"  Asterisk 

"."  Point 

"x"  Cross 

"_"  Horizontal line 

""  Vertical line 

"square"  Square 

"diamond"  Diamond 

"^"  Upwardpointing triangle 

"v"  Downwardpointing triangle 

">"  Rightpointing triangle 

"<"  Leftpointing triangle 

"pentagram"  Pentagram 

"hexagram"  Hexagram 

Color Name  Short Name  RGB Triplet  Appearance 

"red"  "r"  [1 0 0] 

"green"  "g"  [0 1 0] 

"blue"  "b"  [0 0 1] 

"cyan"
 "c"  [0 1 1] 

"magenta"  "m"  [1 0 1] 

"yellow"  "y"  [1 1 0] 

"black"  "k"  [0 0 0] 

"white"  "w"  [1 1 1] 

tbl
— Source table
table  timetable
Source table containing the data to plot, specified as a table or a timetable.
yvar
— Table variables containing ycoordinates
string array  character vector  cell array  pattern  numeric scalar or vector  logical vector  vartype()
Table variables containing the ycoordinates, specified using one of the indexing schemes from the table.
Indexing Scheme  Examples 

Variable names:


Variable index:


Variable type:


The table variables you specify can contain numeric, categorical,
datetime, or duration values. If xvar
and
yvar
both specify multiple variables, the number of
variables must be the same.
Example: stem(tbl,"x",["y1","y2"])
specifies the table
variables named y1
and y2
for the
ycoordinates.
Example: stem(tbl,"x",2)
specifies the second variable
for the ycoordinates.
Example: stem(tbl,"x",vartype("numeric"))
specifies all
numeric variables for the ycoordinates.
xvar
— Table variables containing xcoordinates
string array  character vector  cell array  pattern  numeric scalar or vector  logical vector  vartype()
Table variables containing the xcoordinates, specified using one of the indexing schemes from the table.
Indexing Scheme  Examples 

Variable names:


Variable index:


Variable type:


The table variables you specify can contain numeric, categorical,
datetime, or duration values. If xvar
and
yvar
both specify multiple variables, the number of
variables must be the same.
Example: stem(tbl,["x1","x2"],"y")
specifies the table
variables named x1
and x2
for the
xcoordinates.
Example: stem(tbl,2,"y")
specifies the second variable
for the xcoordinates.
Example: stem(tbl,vartype("numeric"),"y")
specifies all
numeric variables for the xcoordinates.
ax
— Axes
object
Axes
object
Axes
object. If you do not specify the axes,
then stem
plots into the current axes.
NameValue Arguments
Specify optional pairs of arguments as
Name1=Value1,...,NameN=ValueN
, where Name
is
the argument name and Value
is the corresponding value.
Namevalue arguments must appear after other arguments, but the order of the
pairs does not matter.
Before R2021a, use commas to separate each name and value, and enclose
Name
in quotes.
Example: "LineStyle",":","MarkerFaceColor","red"
plots the stem as a dotted
line and colors the marker face red.
The Stem
properties listed
here are only a subset. For a complete list, see Stem Properties.
LineStyle
— Line style
""
(default)  ""
 ":"
 "."
 "none"
Line style, specified as one of the options listed in this table.
Line Style  Description  Resulting Line 

""  Solid line 

""  Dashed line 

":"  Dotted line 

"."  Dashdotted line 

"none"  No line  No line 
LineWidth
— Line width
0.5
(default)  positive value
Line width, specified as a positive value in points, where 1 point = 1/72 of an inch. If the line has markers, then the line width also affects the marker edges.
The line width cannot be thinner than the width of a pixel. If you set the line width to a value that is less than the width of a pixel on your system, the line displays as one pixel wide.
Color
— Stem color
[0 0 0]
(default)  RGB triplet  hexadecimal color code  "r"
 "g"
 "b"
 ...
Stem color, specified as an RGB triplet, a hexadecimal color code, a color name, or a short name.
For a custom color, specify an RGB triplet or a hexadecimal color code.
An RGB triplet is a threeelement row vector whose elements specify the intensities of the red, green, and blue components of the color. The intensities must be in the range
[0,1]
, for example,[0.4 0.6 0.7]
.A hexadecimal color code is a string scalar or character vector that starts with a hash symbol (
#
) followed by three or six hexadecimal digits, which can range from0
toF
. The values are not case sensitive. Therefore, the color codes"#FF8800"
,"#ff8800"
,"#F80"
, and"#f80"
are equivalent.
Alternatively, you can specify some common colors by name. This table lists the named color options, the equivalent RGB triplets, and hexadecimal color codes.
Color Name  Short Name  RGB Triplet  Hexadecimal Color Code  Appearance 

"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"  Not applicable  Not applicable  Not applicable  No color 
Here are the RGB triplets and hexadecimal color codes for the default colors MATLAB^{®} uses in many types of plots.
RGB Triplet  Hexadecimal Color Code  Appearance 

[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" 
Example: "blue"
Example: [0
0 1]
Example: "#0000FF"
Marker
— Marker symbol
"o"
(default)  "+"
 "*"
 "."
 "x"
 ...
Marker symbol, specified as one of the markers listed in this table.
Marker  Description  Resulting Marker 

"o"  Circle 

"+"  Plus sign 

"*"  Asterisk 

"."  Point 

"x"  Cross 

"_"  Horizontal line 

""  Vertical line 

"square"  Square 

"diamond"  Diamond 

"^"  Upwardpointing triangle 

"v"  Downwardpointing triangle 

">"  Rightpointing triangle 

"<"  Leftpointing triangle 

"pentagram"  Pentagram 

"hexagram"  Hexagram 

"none"  No markers  Not applicable 
Example: "+"
Example: "diamond"
MarkerSize
— Marker size
6
(default)  positive value
Marker size, specified as a positive value in points, where 1 point = 1/72 of an inch.
MarkerEdgeColor
— Marker outline color
"auto"
(default)  RGB triplet  hexadecimal color code  "r"
 "g"
 "b"
 ...
Marker outline color, specified as "auto"
, an RGB triplet, a
hexadecimal color code, a color name, or a short name. The default value of
"auto"
uses the same color as the Color
property.
For a custom color, specify an RGB triplet or a hexadecimal color code.
An RGB triplet is a threeelement row vector whose elements specify the intensities of the red, green, and blue components of the color. The intensities must be in the range
[0,1]
, for example,[0.4 0.6 0.7]
.A hexadecimal color code is a string scalar or character vector that starts with a hash symbol (
#
) followed by three or six hexadecimal digits, which can range from0
toF
. The values are not case sensitive. Therefore, the color codes"#FF8800"
,"#ff8800"
,"#F80"
, and"#f80"
are equivalent.
Alternatively, you can specify some common colors by name. This table lists the named color options, the equivalent RGB triplets, and hexadecimal color codes.
Color Name  Short Name  RGB Triplet  Hexadecimal Color Code  Appearance 

"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"  Not applicable  Not applicable  Not applicable  No color 
Here are the RGB triplets and hexadecimal color codes for the default colors MATLAB uses in many types of plots.
RGB Triplet  Hexadecimal Color Code  Appearance 

[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" 
MarkerFaceColor
— Marker fill color
"none"
(default)  "auto"
 RGB triplet  hexadecimal color code  "r"
 "g"
 "b"
 ...
Marker fill color, specified as "auto"
, an RGB triplet, a hexadecimal
color code, a color name, or a short name. The "auto"
option uses the
same color as the Color
property of the parent axes. If you specify
"auto"
and the axes plot box is invisible, the marker fill color is
the color of the figure.
For a custom color, specify an RGB triplet or a hexadecimal color code.
An RGB triplet is a threeelement row vector whose elements specify the intensities of the red, green, and blue components of the color. The intensities must be in the range
[0,1]
, for example,[0.4 0.6 0.7]
.A hexadecimal color code is a string scalar or character vector that starts with a hash symbol (
#
) followed by three or six hexadecimal digits, which can range from0
toF
. The values are not case sensitive. Therefore, the color codes"#FF8800"
,"#ff8800"
,"#F80"
, and"#f80"
are equivalent.
Alternatively, you can specify some common colors by name. This table lists the named color options, the equivalent RGB triplets, and hexadecimal color codes.
Color Name  Short Name  RGB Triplet  Hexadecimal Color Code  Appearance 

"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"  Not applicable  Not applicable  Not applicable  No color 
Here are the RGB triplets and hexadecimal color codes for the default colors MATLAB uses in many types of plots.
RGB Triplet  Hexadecimal Color Code  Appearance 

[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" 
Output Arguments
h
— Stem
objects
Stem
objects
Stem
objects. These are unique identifiers,
which you can use to modify the properties of a specific Stem
object
after it is created.
Extended Capabilities
GPU Arrays
Accelerate code by running on a graphics processing unit (GPU) using Parallel Computing Toolbox™.
Usage notes and limitations:
This function accepts GPU arrays, but does not run on a GPU.
For more information, see Run MATLAB Functions on a GPU (Parallel Computing Toolbox).
Distributed Arrays
Partition large arrays across the combined memory of your cluster using Parallel Computing Toolbox™.
Usage notes and limitations:
This function operates on distributed arrays, but executes in the client MATLAB.
For more information, see Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox).
Version History
Introduced before R2006aR2022b: Pass tables directly to stem
Create plots by passing a table to the stem
function
followed by the variables you want to plot. When you specify your data as a table,
the axis labels and the legend (if present) are automatically labeled using the
table variable names.
See Also
Functions
Properties
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
 América Latina (Español)
 Canada (English)
 United States (English)
Europe
 Belgium (English)
 Denmark (English)
 Deutschland (Deutsch)
 España (Español)
 Finland (English)
 France (Français)
 Ireland (English)
 Italia (Italiano)
 Luxembourg (English)
 Netherlands (English)
 Norway (English)
 Österreich (Deutsch)
 Portugal (English)
 Sweden (English)
 Switzerland
 United Kingdom (English)