¿Cómo agrego un polígono limpio alrededor de un grupo de puntos en un diagrama de dispersión? Estoy usando ggplot2 pero estoy decepcionado con los resultados de geom_polygon.
El conjunto de datos está allí , como un archivo de texto delimitado por tabulaciones. El siguiente gráfico muestra dos medidas de actitudes hacia la salud y el desempleo en muchos países:

Me gustaría cambiar de geom_density2dmenos sofisticado pero empíricamente más correcto geom_polygon. El resultado en datos no clasificados no es útil:

¿Cómo dibujo polígonos 'limpios' que se comporten como rutas de contorno alrededor de los valores min-max yx? Traté de ordenar los datos en vano.
Código:
print(fig2 <- ggplot(d, aes(man, eff, colour=issue, fill=issue)) +
geom_point() + geom_density2d(alpha=.5) + labs(x = "Efficiency", y = "Mandate"))
El dobjeto se obtiene con este archivo CSV .
Solución:
Gracias a Wayne , Andy W y otros por sus consejos! Los datos, el código y los gráficos se han publicado en GitHub . El resultado se ve así:

fuente

?chullconggplot2hasta ahora. No estoy seguro de que lo estoy codificando correctamente, y espero que alguien ya lo haya hecho.alphahullfunciona de manera similar a encontrar el casco convexo, pero le permite ajustarlo hacia adentro / hacia afuera para intentar hacer algo como intervalos de confianza.Respuestas:
Al buscar en Google, encontré el sitio web de Gota Morota, que ya tiene un ejemplo de esto en su sitio web . A continuación se muestra ese ejemplo extendido a sus datos.
fuente
NAmatan lachullfunción. Esperaría que simplemente lo ignore, pero falla al hacerlo y no encontré una manerana.omit()de hacerlo funcionar. Estoy seguro de que es posible, simplemente no tengo las habilidades de piratería informática para ir más allá de la solución anterior.Si entiendo tu problema, estás buscando el casco convexo de
healthy deunemployment. Probablemente hay varios paquetes para hacer esto en R, uno de los cuales es paquetegeometry. Me imagino que los puntos están ordenados en orden alrededor del perímetro, pero tendrías que verificar eso.EDITAR: Aquí hay un ejemplo, que no usa
ggplot, pero espero que sea útil. El ejemplo en lachulldocumentación parece estar equivocado, lo que podría estar desconcertando:EDITAR 2: OK, aquí hay algo usando ggplot2. Nos convertimos
Xen adata.framecon variablesxyy. Luego:Tenga en cuenta que
geom_pointestá usando los datos (X) y aes del ggplot, mientras que lo estoy anulando en elgeom_polygon.Para obtenerlo completamente, necesitaría poner la x e y para el casco para ambos problemas
bar, utilizando una tercera columnaissuepara diferenciarlos.fuente
chullpara generar el casco convexo pero no he podido usar los resultados conggplot2.ggplot2.na.omitpara deshacerme de NA que dejachullde funcionar. Gracias de nuevo.A partir de esta tarde, he incluido la
chullfunción dentro de un paquete R como unageom_convexhullfunción.Una vez que se carga el paquete, se puede usar como cualquier otra geom, en su caso debería ser algo como:
El paquete está disponible en github: https://github.com/cmartin/ggConvexHull
fuente
chullun factor de agrupación hasta que encontré esto.