¿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_density2d
menos 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 d
objeto 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
?chull
conggplot2
hasta ahora. No estoy seguro de que lo estoy codificando correctamente, y espero que alguien ya lo haya hecho.alphahull
funciona 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
NA
matan lachull
funció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
health
y 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 lachull
documentación parece estar equivocado, lo que podría estar desconcertando:EDITAR 2: OK, aquí hay algo usando ggplot2. Nos convertimos
X
en adata.frame
con variablesx
yy
. Luego:Tenga en cuenta que
geom_point
está 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 columnaissue
para diferenciarlos.fuente
chull
para generar el casco convexo pero no he podido usar los resultados conggplot2
.ggplot2
.na.omit
para deshacerme de NA que dejachull
de funcionar. Gracias de nuevo.A partir de esta tarde, he incluido la
chull
función dentro de un paquete R como unageom_convexhull
funció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
chull
un factor de agrupación hasta que encontré esto.