stat_peaks {ggpmisc} | R Documentation |
Local maxima (peaks) or minima (valleys)
Description
stat_peaks
finds at which x positions local y maxima are located and
stat_valleys
finds at which x positions local y minima are located.
Both stats return a subset of data
with rows matching for peaks or
valleys with formatted character labels added. The formatting is determined
by a format string compatible with sprintf()
or strftime()
.
Usage
stat_peaks(
mapping = NULL,
data = NULL,
geom = "point",
span = 5,
ignore_threshold = 0,
strict = FALSE,
label.fmt = NULL,
x.label.fmt = NULL,
y.label.fmt = NULL,
orientation = "x",
position = "identity",
na.rm = FALSE,
show.legend = FALSE,
inherit.aes = TRUE,
...
)
stat_valleys(
mapping = NULL,
data = NULL,
geom = "point",
span = 5,
ignore_threshold = 0,
strict = FALSE,
label.fmt = NULL,
x.label.fmt = NULL,
y.label.fmt = NULL,
orientation = "x",
position = "identity",
na.rm = FALSE,
show.legend = FALSE,
inherit.aes = TRUE,
...
)
Arguments
mapping |
The aesthetic mapping, usually constructed with
|
data |
A layer specific dataset - only needed if you want to override the plot defaults. |
geom |
The geometric object to use display the data. |
span |
a peak is defined as an element in a sequence which is greater
than all other elements within a window of width span centered at that
element. The default value is 5, meaning that a peak is bigger than two
consecutive neighbors on each side. A |
ignore_threshold |
numeric value between 0.0 and 1.0 indicating the size threshold below which peaks will be ignored. |
strict |
logical flag: if TRUE, an element must be strictly greater than all other values in its window to be considered a peak. Default: FALSE. |
label.fmt |
character string giving a format definition for converting
values into character strings by means of function |
x.label.fmt |
character string giving a format definition for
converting $x$-values into character strings by means of function
|
y.label.fmt |
character string giving a format definition for
converting $y$-values into character strings by means of function
|
orientation |
character Either "x" or "y". |
position |
The position adjustment to use for overlapping points on this layer. |
na.rm |
a logical value indicating whether NA values should be stripped before the computation proceeds. |
show.legend |
logical. Should this layer be included in the legends?
|
inherit.aes |
If |
... |
other arguments passed on to |
Details
These stats use geom_point
by default as it is the geom most
likely to work well in almost any situation without need of tweaking. The
default aesthetics set by these stats allow their direct use with
geom_text
, geom_label
, geom_line
, geom_rug
,
geom_hline
and geom_vline
. The formatting of the labels
returned can be controlled by the user.
The default for parameter strict
is TRUE
in functions
splus2R::peaks()
and find_peaks()
, while the default is FALSE
in stat_peaks()
and in stat_valleys()
.
Returned and computed variables
- x
x-value at the peak (or valley) as numeric
- y
y-value at the peak (or valley) as numeric
- x.label
x-value at the peak (or valley) as character
- y.label
y-value at the peak (or valley) as character
Warning!
The current version of these statistics do not support
passing nudge_x
or nurge_y
named parameters to the geometry.
Use 'position' and one of the position functions such as
position_nudge_keep
instead.
Note
These statistics check the scale of the x
aesthetic and if it is
Date or Datetime they correctly generate the labels by transforming the
numeric x
values to Date or POSIXct objects, respectively. In which
case the x.label.fmt
must follow the syntax supported by
strftime()
rather than by sprintf()
. Overlap of labels with
points can avoided by use of one of the nudge positions, possibly together
with geometry geom_text_s
from package
ggpp
, or with geom_text_repel
or
geom_label_repel
from package
ggrepel
. To discard overlapping labels use
check_overlap = TRUE
as argument to geom_text
or
geom_text_s
. By default the labels are character values suitable to
be plotted as is, but with a suitable format passed as argument to
label.fmt
labels suitable for parsing by the geoms (e.g. into
expressions containing Greek letters, super- or subscripts, maths symbols
or maths constructs) can be also easily obtained.
Examples
# lynx is a time.series object
lynx_num.df <-
try_tibble(lynx,
col.names = c("year", "lynx"),
as.numeric = TRUE) # years -> as numeric
ggplot(lynx_num.df, aes(year, lynx)) +
geom_line() +
stat_peaks(colour = "red") +
stat_valleys(colour = "blue")
ggplot(lynx_num.df, aes(lynx, year)) +
geom_line(orientation = "y") +
stat_peaks(colour = "red", orientation = "y") +
stat_valleys(colour = "blue", orientation = "y")
ggplot(lynx_num.df, aes(year, lynx)) +
geom_line() +
stat_peaks(colour = "red") +
stat_peaks(colour = "red", geom = "rug")
ggplot(lynx_num.df, aes(year, lynx)) +
geom_line() +
stat_peaks(colour = "red") +
stat_peaks(colour = "red", geom = "text", hjust = -0.1, angle = 33)
ggplot(lynx_num.df, aes(lynx, year)) +
geom_line(orientation = "y") +
stat_peaks(colour = "red", orientation = "y") +
stat_peaks(colour = "red", orientation = "y",
geom = "text", hjust = -0.1)
lynx_datetime.df <-
try_tibble(lynx,
col.names = c("year", "lynx")) # years -> POSIXct
ggplot(lynx_datetime.df, aes(year, lynx)) +
geom_line() +
stat_peaks(colour = "red") +
stat_valleys(colour = "blue")
ggplot(lynx_datetime.df, aes(year, lynx)) +
geom_line() +
stat_peaks(colour = "red") +
stat_peaks(colour = "red",
geom = "text",
hjust = -0.1,
x.label.fmt = "%Y",
angle = 33)
ggplot(lynx_datetime.df, aes(year, lynx)) +
geom_line() +
stat_peaks(colour = "red") +
stat_peaks(colour = "red",
geom = "text_s",
position = position_nudge_keep(x = 0, y = 200),
hjust = -0.1,
x.label.fmt = "%Y",
angle = 90) +
expand_limits(y = 8000)
ggplot(lynx_datetime.df, aes(year, lynx)) +
geom_line() +
stat_peaks(colour = "red",
geom = "text_s",
position = position_nudge_to(y = 7600),
arrow = arrow(length = grid::unit(1.5, "mm")),
point.padding = 0.7,
x.label.fmt = "%Y",
angle = 90) +
expand_limits(y = 9000)