Como adiciono um polígono puro em torno de um grupo de pontos em um gráfico de dispersão? Estou usando o ggplot2, mas estou decepcionado com os resultados de geom_polygon
.
O conjunto de dados está lá , como um arquivo de texto delimitado por tabulação. O gráfico abaixo mostra duas medidas de atitudes em relação à saúde e ao desemprego em vários países:
Gostaria de mudar geom_density2d
para o menos sofisticado, mas empiricamente mais correto geom_polygon
. O resultado em dados não classificados é inútil:
Como faço para desenhar polígonos 'puros' que se comportam como caminhos de contorno em torno dos valores de min-max yx? Tentei classificar os dados sem sucesso.
Código:
print(fig2 <- ggplot(d, aes(man, eff, colour=issue, fill=issue)) +
geom_point() + geom_density2d(alpha=.5) + labs(x = "Efficiency", y = "Mandate"))
O d
objeto é obtido com este arquivo CSV .
Solução:
Agradecimentos a Wayne , Andy W e outros por suas dicas! Os dados, código e gráficos foram publicados no GitHub . O resultado fica assim:
fonte
?chull
comggplot2
até agora. Não tenho certeza se estou codificando corretamente e espero que alguém já tenha feito isso.alphahull
funcione de maneira semelhante à localização do casco convexo, mas permite que você o ajuste para dentro / fora para tentar fazer algo como intervalos de confiança.Respostas:
Com algumas pesquisas, me deparei com o site da Gota Morota, que já tem um exemplo disso em seu site . Abaixo está o exemplo estendido aos seus dados.
fonte
NA
achull
função de matar . Eu esperaria que isso fosse ignorado, mas falha ao fazê-lo e não encontrei uma maneira de usána.omit()
-lo. Tenho certeza de que é possível, simplesmente não tenho as habilidades de hackers para ir além da solução anterior.Se eu entendo o seu problema, você está procurando o casco convexo de
health
e deunemployment
. Provavelmente existem vários pacotes para fazer isso no R, um dos quais é o pacotegeometry
. Eu imagino que os pontos são classificados em ordem em torno do perímetro, mas você teria que verificar isso.EDIT: Aqui está um exemplo, que não usa
ggplot
, mas espero que seja útil. O exemplo nachull
documentação parece estar errado, o que pode estar deixando você louco:EDIT 2: OK, aqui está algo usando o ggplot2. Transformamos
X
em adata.frame
com variáveisx
ey
. Então:Note que ele
geom_point
está usando os dados (X
) e aes do ggplot, enquanto eu estou substituindo-o nogeom_polygon
.Para obtê-lo completamente, você precisará colocar xey no casco dos dois problemas
bar
, usando uma terceira colunaissue
para diferenciá-los.fonte
chull
para gerar o casco convexo, mas não consegui usar os resultados comggplot2
.ggplot2
.na.omit
para me livrar de NA que parachull
de funcionar. Obrigado novamente.A partir desta tarde, envolvi a
chull
função dentro de um pacote R como umageom_convexhull
função.Depois que o pacote é carregado, ele pode ser usado como qualquer outro geom; no seu caso, deve ser algo como:
O pacote está disponível no github: https://github.com/cmartin/ggConvexHull
fonte
chull
um fator de agrupamento até encontrar isso.