Questão:
Anotando gráficos em R
Jakob Borg
2010-12-30 21:06:34 UTC
view on stackexchange narkive permalink

Esta é mais uma questão de "como usar R" do que uma questão de estatísticas pesadas, mas acho que a concentração de mestres em R aqui torna este um bom fórum para isso. Estou atualizando um pacote de gráficos de série temporal que atualmente usa o gnuplot. A primeira etapa é chegar perto dos gráficos atuais e, em seguida, espero poder adicionar mais análises estatísticas a partir de R posteriormente.

Atualmente, os gráficos gerados pelo gnuplot se parecem com este:

alt text

O gráfico correspondente de R se parece com este:

alt text

Estou razoavelmente feliz com isso. O que está faltando são as legendas abaixo do gráfico do gnuplot. Posso adicionar uma legenda dizendo "In" e "Out", mas como apresentar melhor os valores médio, máximo e mínimo? Eu poderia adicionar linhas horizontais ao gráfico e imprimir os valores dentro da área do gráfico, mas o posicionamento pode interferir no gráfico real.

Então ... por que você não escreve como no gráfico superior?
@nico Falta de expertise em como fazer em R, basicamente.
`paste` é seu amigo. Basta construir uma string como `legend.string <- paste (" In traffic [Max ", max (values),"] ")` e então passar isso como o parâmetro `legend` de` legend`
Desculpe, esta é uma resposta - acho que ainda não ganhei o botão "comentar" ... Tudo que eu ia sugerir é que perguntas "como fazer" como esta podem ser mais adequadas para StackOverflow. Existem R profissionais lá que respondem a esse tipo de pergunta antes de você clicar em 'enviar'! Não sei se há um FAQ oficial ou orientação sobre SO vs. CV, mas como o próprio Hadley responde muitas das perguntas do ggplot2 sobre SO, é aí que eu vou primeiro.
Trzy respostas:
dickoa
2010-12-30 22:59:31 UTC
view on stackexchange narkive permalink

Tenho certeza de que existe uma maneira mais elegante de fazer isso, mas você pode tentar esta:

  Data <- data.frame (serie1 = cumsum (rnorm (100)), serie2 = rnorm (100), temps = as.Date (1: 100, origin = "2000-01-01")) label <- c ("No tráfego [max 2.0G bps] [Avg 1.1G bps] [95% 1,8 G bps] [Mín. 569,4 M bps] "," Tráfego de saída [máx. 2,0 G bps] [Média 672 Mbps] [95% 2,1 G bps] [Mín 154,3 M bps] ") p <- ggplot (derreter (Dados, id = "temps"), aes (temps, valor, grupo = variável, cor = variável)) p <- p + geom_line () + xlab ("") + opts (legend.position = "bottom", legend.title = NULL) p <- p + scale_colour_manual (values ​​= c ("red", "blue"), breaks = c ("serie1", "serie2"), labels = label) print (p)   pré>
(+1) Sua solução é pelo menos mais elegante do que a minha porque você não duplica a variável de agrupamento!
Pergunta relacionada [aqui] (http://stackoverflow.com/questions/8736647/adding-legend-annotate-to-rs-plot-similarly-to-rs-ggplot), Estou tentando remixar isso. Linda +1!
chl
2010-12-30 22:23:03 UTC
view on stackexchange narkive permalink

Uma maneira rápida e suja de colar algum texto e resultados numéricos nos rótulos de sua legenda é simplesmente renomear os níveis dos fatores. Por exemplo,

  df <- data.frame (x = rnorm (100), y = rnorm (100), f = gl (2,50)) df $ f2 <- df $ flevels (df $ f2) <- paste (levels (df $ f), tapply (df $ y, df $ f, mean), sep = ":") p <- ggplot (data = df) + geom_point (aes ( x = x, y = y, color = f2)) p + opts (legend.position = 'bottom', legend.title = NULL)  

Você pode adicionar o que quiser no novos rótulos, como média, mínimo, máximo, etc. (por exemplo, crie uma função personalizada, inspirada em summary () , que retorna os valores desejados e os anexa a c (" In "," Out ") ).

Tim
2011-01-03 04:56:51 UTC
view on stackexchange narkive permalink

Experimente o pacote directlabels para ter mais controle. No que diz respeito à legenda, se você está gerando os gráficos automaticamente, você pode simplesmente usá-la como texto de legenda (em LaTeX ou HTML ou o que quer que seja). Espero que isso ajude.



Estas perguntas e respostas foram traduzidas automaticamente do idioma inglês.O conteúdo original está disponível em stackexchange, que agradecemos pela licença cc by-sa 2.0 sob a qual é distribuído.
Loading...