Como evito a sobreposição de etiquetas em um gráfico R? [fechadas]

44

Estou tentando rotular um gráfico de dispersão bastante simples em R. É isso que eu uso:

plot(SI, TI)
text(SI, TI, Name, pos=4, cex=0.7)

O resultado é medíocre, como você pode ver (clique para ampliar):

insira a descrição da imagem aqui

Tentei compensar isso usando a textxyfunção, mas não é melhor . Aumentar a imagem em si não funciona para os agrupamentos densos.

Existe alguma função ou maneira fácil de compensar isso e deixar R plotar rótulos que não se sobrepõem ?


Aqui está um pequeno subconjunto dos dados que tenho:

Name;SI;TI
01_BAD_talking_head;6.944714;4.421208
01_GOOD_talking_head;5.680141;4.864035
01_GOOD_talking_head_subtitles;7.170114;4.664205
slhck
fonte
11
Eu postei pergunta semelhante aqui , ter um olhar sobre as respostas lá ..
Curious
3
Eu encontrei uma solução ! O identify()Vamos você decidir manualmente onde colocar a etiqueta! Não é o ideal, mas pelas soluções propostas isso funciona melhor para mim.
Curioso

Respostas:

29

Confira o novo pacote ggrepel . O ggrepel fornece geoms para o ggplot2 repelir rótulos de texto sobrepostos. Ele funciona para geom_text e geom_label.

insira a descrição da imagem aqui

A figura é retirada desta postagem do blog .

Sukhdeep Singh
fonte
19

O directlabelspacote faz isso. Na sua página da web :

Este pacote é uma tentativa de tornar a rotulagem direta uma realidade na prática estatística diária, disponibilizando um corpo de funções úteis que facilitam a rotulagem direta de plotagens comuns com sistemas de plotagem de alto nível, como retículo e ggplot2.

Porém, nem sempre é possível para gráficos densos.

Aqui está um pequeno exemplo:

set.seed(123)
a <- c(rnorm(10,-3,2),rnorm(10,3,2))
b <- c(rnorm(10,-3,2),rnorm(10,3,2))
dfr <- data.frame(a,b)
dfr$t <- c(paste("A",1:10,sep=""),paste("B",1:10,sep=""))
direct.label(xyplot(b~a,dfr,groups=t, col="black"))

Consegui me livrar da coloração pontual col="black", mas não das etiquetas.

Laurent
fonte
11
Estou tendo problemas para fazê-lo funcionar. Você poderia fornecer um exemplo simples de trabalho?
slhck 26/09
11
No seu caso, algo como direct.label(xyplot(SI~TI,data=yourDataFrame,group=Name))deve obter um resultado semelhante.
Laurent
Perfeito. Aqui está o que eu acabei usando seu último exemplo simples. Os rótulos e pontos de cores são realmente muito agradáveis, pois você sabe onde os rótulos pertencem.
slhck 26/09/11
11
Eu tive que usar library(lattice)para começar xyplota trabalhar.
22713 David J. Harris
14

Eu sugiro que você dê uma olhada no wordcloudpacote. Sei que este pacote não se concentra exatamente nos pontos, mas nos próprios rótulos, e também o estilo parece ser bastante fixo. Mas, ainda assim, os resultados obtidos com o uso foram impressionantes. Observe também que a versão do pacote em questão foi lançada no momento em que você fez a pergunta, por isso ainda é muito nova.

http://blog.fellstat.com/?cat=11

saída textplot ()

maj
fonte
9

Encontrei um problema semelhante com vários dos gráficos com os quais tenho trabalhado e escrevi um pacote básico que usa simulação de campo de força para ajustar a localização dos objetos. A vantagem sobre algumas das soluções citadas acima é o ajuste dinâmico para a proximidade relativa de objetos em 2D. Embora muitas melhorias sejam possíveis, incluindo heurísticas e integração com o ggplot, etc., parece que a tarefa foi concluída. A seguir, ilustra a funcionalidade:

install.packages("FField", type = "source")
install.packages("ggplot2")
install.packages("gridExtra")
library(FField)
FFieldPtRepDemo()

Por enquanto, não há heurísticas para uma variedade de áreas e distribuições de pontos, pois a solução atendeu às minhas necessidades e eu queria obter algo útil para as pessoas rapidamente, mas as adicionarei a médio prazo. No momento, recomendo dimensionar os gráficos para 100x100 e voltar e ajustar levemente os parâmetros de atração e repulsão padrão, conforme necessário.

gregk
fonte
8

Caso você simplesmente não consiga que os rótulos funcionem corretamente como produzidos pelo R, lembre-se de que você sempre pode salvar os gráficos em um formato vetorial (como .pdf) e puxá-los para um programa de edição como o InkScape ou o Adobe Illustrator.

Fomite
fonte
8

Algumas ferramentas adicionais para analisar no R:

Isso não fará tudo por você, mas um deles pode fazer parte de uma solução.

Greg Snow
fonte