Adiciona a função para gráfico beeswarm e segplot por grupo.

parent 114dcc97
#' @name panel.beeswarm
#' @export
#' @author Walmes Zeviani baseado no pacote
#' \href{http://www.cbs.dtu.dk/~eklund/beeswarm/}{beeswarm}.
#' @title Diagrama de Dispersão com Aranjo dos Pontos como Colmeia
#'
#' @description Used to make scatter plot of discrete variables with no
#' overlapping points. Observations with the same y value are spread.
#'
#' @param spread Um escalar numérico a distância entre os pontos. Esse
#' valor é obtido por tentativa erro e toda vez que mudar as
#' dimensões do gráfico, eles precisam ser novamente fornecidos, no
#' entanto são valores na escala do eixo \code{x} e por isso são
#' baseados nas distâncias entre os níveis do fator representado
#' neste eixo. Como sugestão, abra sempre a janela gráfica
#' (\code{x11()}) ou faça a exportação (\code{png()}, \code{pdf()},
#' etc) com dimensões conhecidas e calibre o \code{spred} para que
#' seja exibido adequadamente.
#'
#' @param x,y,subscripts,... Argumentos passados para a
#' \code{\link[lattice]{panel.xyplot}}.
#'
#' @return A função passa conteúdo para o argumento \code{panel}.
#'
#' @seealso \code{\link[lattice]{xyplot}}.
#' @import lattice
#' @examples
#'
#' data(capdesfo)
#' str(capdesfo)
#'
#' library(lattice)
#'
#' # x11(width = 7, height = 2.8)
#' xyplot(ncap ~ des | est, data = capdesfo,
#' layout = c(5, 1), as.table = TRUE,
#' type = c("p", "smooth"), col = 1, col.line = "gray50",
#' xlim = extendrange(c(0:1), f = 0.15),
#' xlab = "Nível de desfolha artificial",
#' ylab = "Número de capulho produzidos",
#' spread = 0.07, panel = panel.beeswarm)
#'
#' # x11(width = 7, height = 2.8)
#' xyplot(ncap ~ est | factor(des), data = capdesfo,
#' layout = c(5, 1), as.table = TRUE,
#' type = c("p", "smooth"), col = 1, col.line = "gray50",
#' xlab = "Fase de desenvolvimento da planta",
#' ylab = "Número de capulhos produzidos",
#' scales = list(x = list(
#' at = 1:nlevels(capdesfo$est),
#' labels = substr(levels(capdesfo$est),
#' start = 1, stop = 3))),
#' spread = 0.35, panel = panel.beeswarm)
#'
panel.beeswarm <- function(x, y, subscripts, spread, ...){
xx <- x
yy <- y
aux <- by(cbind(yy, xx, subscripts),
INDICES = xx,
FUN = function(i) {
or <- order(i[, 1])
ys <- i[or, 1]
yt <- table(ys)
dv <- sapply(unlist(yt),
FUN = function(j) {
seq(from = 1,
to = j,
length.out = j) -
(j + 1)/2
})
if (!is.list(dv)) {
dv <- as.list(dv)
}
xs <- i[or, 2] + spread * do.call(c, dv)
cbind(x = xs, y = ys, subscripts = subscripts[or])
})
aux <- do.call(rbind, aux)
panel.xyplot(aux[, 1], aux[, 2], subscripts = aux[, 3], ...)
}
#' @name panel.groups.segplot
#' @export
#' @author Walmes Zeviani
#' @title Painel para Fazer Intervalos para Grupos no \code{segplot()}
#'
#' @description Essa função permite fazer intervalos de confiança (ou
#' com barras de erro) em gráficos da \code{latticeExtra::segplot()}
#' para grupos (\code{groups =}) de tal forma que eles não fiquem
#' sobrepostos.
#'
#' @param x,y,z,centers,data,subscripts,... Argumentos passados para a
#' \code{\link[latticeExtra]{segplot}}.
#'
#' @param groups A variável (\code{factor}) de agrupamento, de mesmo
#' comprimento de \code{lwr} e \code{upr}.
#'
#' @param gap Escalar que representa a distância entre os segmentos. O
#' valor default é 0,1. Como um fator com \eqn{k} níveis é
#' representado pelos números inteiros \eqn{1, 2, \ldots, k}, então
#' \eqn{0 \leq \textrm{gap} < 1/k}. Se for usado um valor negativo,
#' os intervalos serão apresentados em ordem inversa.
#'
#' @return A função é passada para o argumento \code{panel} e retorna
#' elementos necessários para a \code{\link[latticeExtra]{segplot}}.
#'
#' @seealso \code{\link[latticeExtra]{segplot}}.
#' @import latticeExtra
#' @examples
#'
#' library(latticeExtra)
#'
#' m0 <- lm(log(breaks) ~ wool * tension, data = warpbreaks)
#'
#' pred <- with(warpbreaks, expand.grid(KEEP.OUT.ATTRS = TRUE,
#' wool = levels(wool),
#' tension = levels(tension)))
#'
#' pred <- cbind(pred,
#' predict(m0, newdata = pred, interval = "confidence"))
#' str(pred)
#'
#' segplot(wool ~ lwr + upr, centers = fit, data = pred,
#' draw = FALSE, horizontal = FALSE)
#'
#' segplot(wool ~ lwr + upr, centers = fit, data = pred,
#' draw = FALSE, horizontal = FALSE,
#' groups = tension, gap = NULL,
#' panel = panel.groups.segplot)
#'
panel.groups.segplot <- function(x, y, z, centers,
groups, gap = NULL,
data, subscripts, ...) {
if (!missing(data)) {
data <- eval(data, envir = parent.frame())
groups <- data[, deparse(substitute(groups))]
}
stopifnot(is.factor(groups))
stopifnot(length(groups) == length(z))
if (is.null(gap)) {
gap <- 0.5/nlevels(groups)
}
d <- 2 * ((as.numeric(groups) - 1)/(nlevels(groups) - 1)) - 1
z <- as.numeric(z) + gap * d
panel.segplot(x, y, z, centers = centers,
subscripts = subscripts, ...)
}
% Generated by roxygen2 (4.1.1): do not edit by hand
% Please edit documentation in R/panel.beeswarm.R
\name{panel.beeswarm}
\alias{panel.beeswarm}
\title{Diagrama de Dispersão com Aranjo dos Pontos como Colmeia}
\usage{
panel.beeswarm(x, y, subscripts, spread, ...)
}
\arguments{
\item{x,y,subscripts,...}{Argumentos passados para a
\code{\link[lattice]{panel.xyplot}}.}
\item{spread}{Um escalar numérico a distância entre os pontos. Esse
valor é obtido por tentativa erro e toda vez que mudar as
dimensões do gráfico, eles precisam ser novamente fornecidos, no
entanto são valores na escala do eixo \code{x} e por isso são
baseados nas distâncias entre os níveis do fator representado
neste eixo. Como sugestão, abra sempre a janela gráfica
(\code{x11()}) ou faça a exportação (\code{png()}, \code{pdf()},
etc) com dimensões conhecidas e calibre o \code{spred} para que
seja exibido adequadamente.}
}
\value{
A função passa conteúdo para o argumento \code{panel}.
}
\description{
Used to make scatter plot of discrete variables with no
overlapping points. Observations with the same y value are spread.
}
\examples{
data(capdesfo)
str(capdesfo)
library(lattice)
# x11(width = 7, height = 2.8)
xyplot(ncap ~ des | est, data = capdesfo,
layout = c(5, 1), as.table = TRUE,
type = c("p", "smooth"), col = 1, col.line = "gray50",
xlim = extendrange(c(0:1), f = 0.15),
xlab = "Nível de desfolha artificial",
ylab = "Número de capulho produzidos",
spread = 0.07, panel = panel.beeswarm)
# x11(width = 7, height = 2.8)
xyplot(ncap ~ est | factor(des), data = capdesfo,
layout = c(5, 1), as.table = TRUE,
type = c("p", "smooth"), col = 1, col.line = "gray50",
xlab = "Fase de desenvolvimento da planta",
ylab = "Número de capulhos produzidos",
scales = list(x = list(
at = 1:nlevels(capdesfo$est),
labels = substr(levels(capdesfo$est),
start = 1, stop = 3))),
spread = 0.35, panel = panel.beeswarm)
}
\author{
Walmes Zeviani baseado no pacote
\href{http://www.cbs.dtu.dk/~eklund/beeswarm/}{beeswarm}.
}
\seealso{
\code{\link[lattice]{xyplot}}.
}
% Generated by roxygen2 (4.1.1): do not edit by hand
% Please edit documentation in R/panel.groups.segplot.R
\name{panel.groups.segplot}
\alias{panel.groups.segplot}
\title{Painel para Fazer Intervalos para Grupos no \code{segplot()}}
\usage{
panel.groups.segplot(x, y, z, centers, groups, gap = NULL, data, subscripts,
...)
}
\arguments{
\item{x,y,z,centers,data,subscripts,...}{Argumentos passados para a
\code{\link[latticeExtra]{segplot}}.}
\item{groups}{A variável (\code{factor}) de agrupamento, de mesmo
comprimento de \code{lwr} e \code{upr}.}
\item{gap}{Escalar que representa a distância entre os segmentos. O
valor default é 0,1. Como um fator com \eqn{k} níveis é
representado pelos números inteiros \eqn{1, 2, \ldots, k}, então
\eqn{0 \leq \textrm{gap} < 1/k}. Se for usado um valor negativo,
os intervalos serão apresentados em ordem inversa.}
}
\value{
A função é passada para o argumento \code{panel} e retorna
elementos necessários para a \code{\link[latticeExtra]{segplot}}.
}
\description{
Essa função permite fazer intervalos de confiança (ou
com barras de erro) em gráficos da \code{latticeExtra::segplot()}
para grupos (\code{groups =}) de tal forma que eles não fiquem
sobrepostos.
}
\examples{
library(latticeExtra)
m0 <- lm(log(breaks) ~ wool * tension, data = warpbreaks)
pred <- with(warpbreaks, expand.grid(KEEP.OUT.ATTRS = TRUE,
wool = levels(wool),
tension = levels(tension)))
pred <- cbind(pred,
predict(m0, newdata = pred, interval = "confidence"))
str(pred)
segplot(wool ~ lwr + upr, centers = fit, data = pred,
draw = FALSE, horizontal = FALSE)
segplot(wool ~ lwr + upr, centers = fit, data = pred,
draw = FALSE, horizontal = FALSE,
groups = tension, gap = NULL,
panel = panel.groups.segplot)
}
\author{
Walmes Zeviani
}
\seealso{
\code{\link[latticeExtra]{segplot}}.
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment