Arquivo

Posts Tagged ‘legenda’

Como fazer legendas em gráficos

Gráficos com legendas e assinatura.

 

Para os gráficos do pacote graphics a adição de legendas é feita por meio da função legend(). Essa função possuí diversas opções para confecção de diversos tipos de legenda (veja os exemplos da documentação).

Nessa ridícula eu fiz alguns exemplos de como colocar legendas em gráficos de funções, gráfico com pontos e retas, gráfico do ajuste de um modelo de regressão, gráfico de barras, legenda fora da área gráfica, escolha da posição da legenda com o mouse e como colocar assinatura nos gráficos. A documentação da função esclarece o significado dos argumentos usados. Até a próxima ridícula.

#-----------------------------------------------------------------------------
# legenda para uma função

curve(x+x^2, 0, 3, lty=1, col=2, lwd=2)
legend("topleft", legend="f(x)", lty=1, col=2, lwd=2, bty="n")

#-----------------------------------------------------------------------------
# legenda para gráfico de pontos ligados

x <- 1:10
y <- x+rnorm(x,0.5)
plot(y~x, type="o", pch=19)
legend("bottomright", legend="valores observados",
       lty=1, col=1, bty="n", pch=19)

#-----------------------------------------------------------------------------
# legenda para pontos e reta de regressão

m0 <- lm(y~x)
plot(y~x)
abline(m0, col=2, lty=2, lwd=2)
legend("top", legend=c("valores observados", "valores ajustados"),
       lty=c(NA,2), col=c(1,2), lwd=1:2, bty="n", pch=c(1,NA))

#-----------------------------------------------------------------------------
# legenda para gráficos de barras

z <- matrix(1:4, 2, 2)
colnames(z) <- c("A","B")
barplot(z, beside=TRUE, col=c("forestgreen", "palegreen"))
legend("topleft", legend=c("tipo 1", "tipo 2"),
       fill=c("forestgreen", "palegreen"), bty="n")

#-----------------------------------------------------------------------------
# legenda fora da área gráfica disposto em colunas

barplot(z, beside=TRUE, col=c("forestgreen", "palegreen"))
legend(x=1, y=4.5, xpd=TRUE, ncol=2, legend=c("tipo 1", "tipo 2"),
       fill=c("forestgreen", "palegreen"), bty="n")

#-----------------------------------------------------------------------------
# escolhendo a posição da legenda com o mouse

barplot(z, beside=TRUE, col=c("forestgreen", "palegreen"))
legend(locator(1), xpd=TRUE, ncol=2, legend=c("tipo 1", "tipo 2"),
       fill=c("forestgreen", "palegreen"), bty="n")

#-----------------------------------------------------------------------------
# nota de rodapé no gráfico com assinatura, data e versão

barplot(z, beside=TRUE, col=c("forestgreen", "palegreen"))
legend("topleft", xpd=TRUE, ncol=2, legend=c("tipo 1", "tipo 2"),
       fill=c("forestgreen", "palegreen"), bty="n")
mtext(side=4, at=par("usr")[3], adj=0,
      cex=0.8, col="gray40", line=-1,
      text=paste("Walmes Zeviani --",
        format(Sys.time(), "%d/%m/%Y %H:%M:%S --"),
        R.version.string))

#-----------------------------------------------------------------------------
Anúncios
Categorias:gráficos Tags:, , , ,

Expressões, bandas de confiança e legenda

Nesse post vou apresentar como confeccionar um gráfico para representar o ajuste de um modelo de regressão. Esse gráfico vai conter elementos básicos de um ajuste, ou seja, valores observados, valores preditos, bandas de confiança, legenda e equação estimada (veja figura abaixo), que são elementos que normalmente aparecem em gráficos de artigos científicos e gráficos gerados por outros aplicativos estatísticos (menos interessantes que o R, lógico!).

Valores observados e preditos pelo modelo de regressão com o intervalo de confiança (95%).

Vamos usar os dados contidos no data.frame “anscombe”. Esse conjunto de dados é usado em livros de regressão para exemplificar a utilidade das medidas de diagnóstico de resíduos. Em outra oportunidade vou postar algo sobre isso.

No script abaixo, na linha [10] foi ajustado o modelo de equação da reta

y_{1i} = \beta_0 + \beta_1 \cdot x_{1i} + \epsilon_i.

aos dados. O resumo desse ajuste é apresentado em [11]. Foi feito a predição da resposta segundo a equação acima e as estimativas dos parâmetros no passo [16:17]. Usamos um intervalo de 50 pontos para obtermos linhas suaves. As estimativas dos parâmetros e R² foram arredondadas e armazenadas em um vetor [19].

No último bloco do script, trocamos a opção para que os decimais sejam representados por vírgula tanto no console quanto nos gráficos [24], pois na língua portuguesa o separador decimal é a virgula. Em [25] fazemos o diagrama de dispersão dos dados observados, adicionando as retas do ajuste e das bandas de confiança em [26]. Em [27:30] é colocada a legenda ao gráfico no canto inferior direito, identificando com ponto de linhas os valores observados, valores preditos e as bandas de confiança de 95% para o valor predito. Finalmente, em [31:33] é adicionado à equação ajustada ao gráfico. Usamos a função locator() para que o usuário clique no gráfico para adicionar a equação. A função substitute() foi usada para automaticamente substituir os valores dos parâmetros por suas estimativas na equação.

#-----------------------------------------------------------------------------
# dados

data(anscombe)
str(anscombe)

#-----------------------------------------------------------------------------
# ajuste do modelo

m0 <- lm(y1~x1, data=anscombe)
summary(m0)

#-----------------------------------------------------------------------------
# fazendo a predição intervalar num grid regular mais fino

pred <- data.frame(x1=seq(min(anscombe$x1), max(anscombe$x1), length=50))
pred$y1 <- predict(m0, newdata=pred, interval="confidence")
str(pred)
cf <- format(c(coef(m0), summary(m0)$r.squared), digits=4)

#-----------------------------------------------------------------------------
# fazendo o gráfico, descomente para salvar a figura em png

#png("f001.png", w=500, h=300); par(mar=c(5.1,4.1,2.1,2.1))
options(OutDec=",")
plot(y1~x1, data=anscombe, xlab=expression(x[1]), ylab=expression(y[1]))
with(pred, matlines(x1, y1, col=c(1,2,2), lty=c(1,2,2)))
legend("bottomright",
       legend=c("valores observados", "valores preditos",
         "intervalo de confiança (95%)"),
       lty=c(NA,1,2), col=c(1,1,2), pch=c(1,NA,NA), bty="n")
text(locator(n=1), # ao salvar a figura use x=7.5, y=10 no lugar da locator()
     label=substitute(hat(y)[1]==a+b%.%x[1]~~~(R^2==c),
       list(a=cf[1], b=cf[2], c=cf[3]))) # clicar no gráfico
#dev.off()

#-----------------------------------------------------------------------------