38 votos

Cómo dibujar polígonos nítidos alrededor de las regiones del gráfico de dispersión en el ggplot2

¿Cómo añado un polígono nítido alrededor de un grupo de puntos en un gráfico de dispersión? Estoy usando ggplot2 pero estoy decepcionado con los resultados de geom_polygon .

El conjunto de datos es por ahí como un archivo de texto delimitado por tabulaciones. El gráfico siguiente muestra dos medidas de las actitudes hacia la salud y el desempleo en un grupo de países:

scatterplot with density2d

Me gustaría cambiar de geom_density2d a la menos elegante pero empíricamente más correcta geom_polygon . El resultado de los datos no clasificados no es útil:

enter image description here

¿Cómo dibujo polígonos "limpios" que se comportan como caminos de contorno alrededor de los valores min-max y-x? Intenté ordenar los datos sin éxito.

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 El objeto se obtiene con este archivo CSV .

Solución:

Gracias a Wayne , Andy W y otros para sus indicaciones! Los datos, el código y los gráficos han sido enviado a GitHub . El resultado se ve así:

result

6 votos

El término que podría estar buscando es el casco convexo de los puntos (o potencialmente del casco alfa). Usted debe ser capaz de encontrar una función de R para calcular estos y luego ser capaz de añadir como capas a la trama.

0 votos

Gracias por señalar la terminología correcta. He fallado en el uso de ?chull con ggplot2 hasta ahora. No estoy seguro de estar codificando bien, y espero que alguien lo haya hecho ya.

0 votos

¿Podría añadir su código R a la pregunta?

40voto

Judioo Puntos 625

Buscando un poco en Google he dado con la página web de Gota Morota que tiene un ejemplo de cómo hacer esto ya en su sitio web . A continuación se muestra ese ejemplo ampliado a sus datos.

enter image description here

library(ggplot2)
work <- "E:\\Forum_Post_Stuff\\convex_hull_ggplot2"
setwd(work)

#note you have some missing data
mydata <- read.table(file = "emD71JT5.txt",header = TRUE, fill = TRUE)
nomissing <- na.omit(mydata) #chull function does not work with missing data

#getting the convex hull of each unique point set
df <- nomissing
find_hull <- function(df) df[chull(df$eff, df$man), ]
hulls <- ddply(df, "issue", find_hull)

plot <- ggplot(data = nomissing, aes(x = eff, y = man, colour=issue, fill = issue)) +
geom_point() + 
geom_polygon(data = hulls, alpha = 0.5) +
labs(x = "Efficiency", y = "Mandate")
plot

0 votos

Gracias, revisaré el código en consecuencia. Por desgracia, su archivo de imagen no parece cargar aquí, pero el código está ahí.

0 votos

@Fr. , ¿Cuál es exactamente el problema?

0 votos

@AndyW Desgraciadamente, el código no admite valores perdidos, y no he encontrado la forma de modificarlo para que lo haga.

9voto

Loren Pechtel Puntos 2212

Unos estudiantes del Skidmore College hicieron recientemente un sencillo experimento y comprobaron que las diferencias eran de varios metros entre sí, pero nada más.

http://academics.skidmore.edu/blogs/onlocation/2012/03/30/smartphone_accuracy/

0 votos

Correcto lo del casco convexo. He intentado utilizar chull para generar el casco convexo, pero no pudo utilizar los resultados con ggplot2 .

0 votos

@Fr.: He hecho una edición rápida de mi respuesta. A ver si eso te pone en el camino correcto.

0 votos

Puedo ver cómo funciona por sí solo, pero me pregunto cómo obtener esa última línea con ggplot2 .

9voto

Naveen Puntos 25

A partir de esta tarde, he envuelto el chull dentro de un paquete R como geom_convexhull función.

Una vez cargado el paquete, se puede utilizar como cualquier otro geom, en tu caso debería ser algo así como :

ggplot(d, aes(man, eff, colour=issue, fill=issue)) + 
  geom_convexhull(alpha=.5) + 
  geom_point() + 
  labs(x = "Efficiency", y = "Mandate"))

El paquete está disponible en github : https://github.com/cmartin/ggConvexHull

0 votos

Muchas gracias. Me estaba frustrando de salida no deseada al tratar de aplicar chull a través de un factor de agrupación hasta que encontré esto.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X