Plot hidden Markov models
Function plot.hmm
plots a directed graph with pie charts of
emission probabilities as vertices/nodes.
## S3 method for class 'hmm' plot(x, layout = "horizontal", pie = TRUE, vertex.size = 40, vertex.label = "initial.probs", vertex.label.dist = "auto", vertex.label.pos = "bottom", vertex.label.family = "sans", loops = FALSE, edge.curved = TRUE, edge.label = "auto", edge.width = "auto", cex.edge.width = 1, edge.arrow.size = 1.5, edge.label.family = "sans", label.signif = 2, label.scientific = FALSE, label.max.length = 6, trim = 1e-15, combine.slices = 0.05, combined.slice.color = "white", combined.slice.label = "others", with.legend = "bottom", ltext = NULL, legend.prop = 0.5, cex.legend = 1, ncol.legend = "auto", cpal = "auto", cpal.legend = "auto", legend.order = TRUE, main = NULL, withlegend, ...)
x |
A hidden Markov model object of class |
layout |
specifies the layout of vertices (nodes). Accepts a
numerical matrix, a |
pie |
Are vertices plotted as pie charts of emission probabilities? Defaults to TRUE. |
vertex.size |
Size of vertices, given as a scalar or numerical vector. The default value is 40. |
vertex.label |
Labels for vertices. Possible options include
|
vertex.label.dist |
Distance of the label of the vertex from its
center. The default value |
vertex.label.pos |
Positions of vertex labels, relative to
the center of the vertex. A scalar or numerical vector giving
position(s) as radians or one of |
vertex.label.family, edge.label.family |
Font family to be used for
vertex/edge labels. See argument |
loops |
Defines whether transitions back to same states are plotted. |
edge.curved |
Defines whether to plot curved edges (arcs, arrows)
between vertices. A logical or numerical vector or scalar. Numerical
values specify curvatures of edges. The default value |
edge.label |
Labels for edges. Possible options include
|
edge.width |
Width(s) for edges. The default |
cex.edge.width |
An expansion factor for edge widths. Defaults to 1. |
edge.arrow.size |
Size of the arrow in edges (constant). Defaults to 1.5. |
label.signif |
Rounds labels of model parameters to specified number of significant digits, 2 by default. Ignored for user-given labels. |
label.scientific |
Defines if scientific notation should be used to
describe small numbers. Defaults to |
label.max.length |
Maximum number of digits in labels of model parameters. Ignored for user-given labels. |
trim |
Scalar between 0 and 1 giving the highest probability of transitions that are plotted as edges, defaults to 1e-15. |
combine.slices |
Scalar between 0 and 1 giving the highest probability of emission probabilities that are combined into one state. The dafault value is 0.05. |
combined.slice.color |
Color of the combined slice that includes
the smallest emission probabilities (only if argument
|
combined.slice.label |
The label for combined states (when argument
|
with.legend |
Defines if and where the legend of state colors is
plotted. Possible values include |
ltext |
Optional description of (combined) observed states to appear
in the legend. A vector of character strings. See |
legend.prop |
Proportion used for plotting the legend. A scalar between 0 and 1, defaults to 0.5. |
cex.legend |
Expansion factor for setting the size of the font for labels in the legend. The default value is 1. Values lesser than 1 will reduce the size of the font, values greater than 1 will increase the size. |
ncol.legend |
The number of columns for the legend. The default value
|
cpal |
Optional color palette for (combinations of) observed states.
The default value |
cpal.legend |
Optional color palette for the legend, only considered when legend.order is FALSE. Should match ltext. |
legend.order |
Whether to use the default order in the legend, i.e., order by appearance (first by hidden state, then by emission probability). TRUE by default. |
main |
Main title for the plot. Omitted by default. |
withlegend |
Deprecated. Use |
... |
Other parameters passed on to |
build_hmm
and fit_model
for building and
fitting Hidden Markov models, mc_to_sc
for transforming
multistate hmm
objects into single-channel objects,
hmm_biofam
and hmm_mvad
for information on the models
used in the examples, and
plot.igraph
for the general plotting function of directed graphs.
# Multichannel data, left-to-right model # Loading a HMM of the biofam data data("hmm_biofam") # Plotting hmm object plot(hmm_biofam) # Plotting HMM with plot(hmm_biofam, # varying curvature of edges edge.curved = c(0, -0.7, 0.6, 0.7, 0, -0.7, 0), # legend with two columns and less space ncol.legend = 2, legend.prop = 0.4, # new label for combined slice combined.slice.label = "States with probability < 0.05") # Plotting HMM with given coordinates plot(hmm_biofam, # layout given in 2x5 matrix # x coordinates in the first column # y coordinates in the second column layout = matrix(c(1, 3, 3, 5, 3, 0, 0, 1, 0, -1), ncol = 2), # larger vertices vertex.size = 50, # straight edges edge.curved = FALSE, # thinner edges and arrows cex.edge.width = 0.5, edge.arrow.size = 1, # varying positions for vertex labels (initial probabilities) vertex.label.pos = c(pi, pi/2, -pi/2, 0, pi/2), # different legend properties with.legend = "top", legend.prop = 0.3, cex.legend = 1.1, # Fix axes to the right scale xlim = c(0.5, 5.5), ylim = c(-1.5, 1.5), rescale = FALSE, # all states (not combining states with small probabilities) combine.slices = 0, # legend with two columns ncol.legend = 2) # Plotting HMM with own color palette plot(hmm_biofam, cpal = 1:10, # States with emission probability less than 0.2 removed combine.slices = 0.2, # legend with two columns ncol.legend = 2) # Plotting HMM without pie graph and with a layout function require("igraph") # Setting the seed for a random layout set.seed(1234) plot(hmm_biofam, # Without pie graph pie = FALSE, # Using an automatic layout function from igraph layout = layout_nicely, vertex.size = 30, # Straight edges and probabilities of moving to the same state edge.curved = FALSE, loops = TRUE, # Labels with three significant digits label.signif = 3, # Fixed edge width edge.width = 1, # Remove edges with probability less than 0.01 trim = 0.01, # Hidden state names as vertex labels vertex.label = "names", # Labels insidde vertices vertex.label.dist = 0, # Fix x-axis (more space on the right-hand side) xlim = c(-1, 1.3)) # Single-channel data, unrestricted model # Loading a hidden Markov model of the mvad data (hmm object) data("hmm_mvad") # Plotting the HMM plot(hmm_mvad) # Checking the order of observed states (needed for the next call) require(TraMineR) alphabet(hmm_mvad$observations) # Plotting the HMM with own legend # Note: observation "none" nonexistent in the observations plot(hmm_mvad, # Override the default order in the legend legend.order = FALSE, # Colours in the pies (ordered by the alphabet of observations) cpal = c("purple", "pink", "brown", "lightblue", "orange", "green"), # Colours in the legend (matching to ltext) cpal.legend = c("orange", "pink", "brown", "green", "lightblue", "purple", "gray"), # Labels in the legend (matching to cpal.legend) ltext = c("school", "further educ", "higher educ", "training", "jobless", "employed", "none")) require("igraph") plot(hmm_mvad, # Layout in circle (layout function from igraph) layout = layout_in_circle, # Less curved edges with smaller arrows, no labels edge.curved = 0.2, edge.arrow.size = 0.9, edge.label = NA, # Positioning vertex labels (initial probabilities) vertex.label.pos = c("right", "right", "left", "left", "right"), # Less space for the legend legend.prop = 0.3)
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.