Processing math: 100%

6 votos

¿De todos modos eliminar puntos en forma periférica en ggplot2?

Estoy a mapa de un terreno de un área y, a continuación, trazar puntos por encima de él (dada por la Coordenada y coordenada y). Sin embargo, me enteré de que hay ciertos errores en los datos introducidos para la Coordenada y coordenada y en algunos puntos de la periferia, y ggplot (la que estoy usando) tiende a reconfigurar el mapa en el fin de adaptarse a los distantes puntos.

Hay alguna forma rápida de solucionar este problema? No sé de ninguna, excepto para identificar y corregir los puntos manualmente. Estoy usando la forma de archivos de la Ordnance survey.

Aquí está la captura de pantalla. La imagen no parece ser sesgada. Sin embargo, en comparación con otras imágenes, las diferencias son evidentes.

**

EDITAR

**

El código que estoy usando es el siguiente.

countyRegion<- readShapePoly(file.choose())
norfolkCounty<- countyRegion[countyRegion$NAME=="Norfolk County",]
#convert shape file into data that can be plotted on graph
gpclibPermit()
norfolk<- fortify(norfolkCounty,region="NAME")
Norfolk<- merge(norfolk, norfolkCounty@data,by.x="id",by.y="NAME")

#eit data
jul2012<- read.table(file.choose(),header=TRUE,as.is=TRUE,blank.lines.skip=FALSE,sep=",")
jul2012$Crime.type<- factor(jul2012$Crime.type)
jul2012<- jul2012[jul2012$Crime.type!="",]
jul2012$Crime.type<- factor(jul2012$Crime.type)
levels(jul2012$Crime.type)<- c("Anti-social behaviour","Theft/burglary","Criminal damage/arson","Drugs","other crime","Theft/burglary","Public disorder and weapons","Theft/burglary","Vehicle crime","Violence and Sexual Offences")

#plot
jul12Map<- ggplot(data=Norfolk,aes(long,lat)) + geom_polygon() + geom_point(data=jul2012,aes(Easting,Northing,colour=as.factor(Crime.type)),alpha=0.6) + scale_colour_brewer(palette="Set1",name="Category") + theme_bw() + scale_x_continuous(breaks=0,labels="") + scale_y_continuous(breaks=0,labels="") + theme(axis.ticks=element_blank(),panel.grid.major=element_blank(),panel.grid.minor=element_blank())

La forma de archivo y el crimen estadísticas de archivos están vinculados, así como el dbf, shx, y prjarchivos. enter image description hereenter image description here

Muchas gracias.

5voto

strider24 Puntos 725

Estoy asumiendo que usted está utilizando el Meridiano de 2 datos de la artillería de la Encuesta y que han utilizado y los datos para crear el gráfico a continuación. Me han despojado de las partes del código que me parecía redundante. Básicamente, tan lejos como puedo ver que usted desea eliminar automáticamente los puntos que no están dentro de la zona en cuestión, en este caso el condado de Norfolk.

La clave de la cuestión (me parece) es crear un SpatialPoints objeto y el uso de la over función de la sp paquete para comprobar si los puntos se encuentran dentro del polígono de interés. Este post proporciona una orientación útil. Si los puntos se encuentran fuera del polígono, NA valores, que se puede encontrar con bastante facilidad. (EDITAR dicho sea de paso, los puntos que se encuentran fuera de la Norfolk polígono se refieren a direcciones válidas - que no son simples errores de transposición de Eastings o Northings.)

He aquí lo que el mapa se ve como con los valores atípicos:

norfolk bad

He aquí lo que el mapa se ve como con los valores atípicos eliminado:

norfolk good

Aquí es el código usado para crear los mapas. No he tenido mucha experiencia con over y funciones similares, por lo que probablemente quiere experimento para asegurarse de que el código es el sonido. He comprobado el 'malo' puntos y parecía que en la mayoría de los casos se corresponden con los valores atípicos en el mapa.

require(rgdal)
require(ggplot2)

work.dir <- "your_dir_here_no_trailing_slash"

countyRegion <- readOGR(work.dir, layer = "county_region")
norfolkCounty<- countyRegion[countyRegion$NAME == "NORFOLK COUNTY",]

norfolk <- fortify(norfolkCounty, region = "NAME")

jul2012<- read.csv(paste0(work.dir, "/2012-07-norfolk-street.csv"),
                     header = TRUE)
names(jul2012)[which(names(jul2012) == 'Easting')] <- 'long'
names(jul2012)[which(names(jul2012) == 'Northing')] <- 'lat'

ggplot(data = norfolk, aes(x = long, y = lat, group = group)) +
    geom_polygon(colour = "black", fill = "white") +
    scale_x_continuous(breaks = seq(500000, 700000, 5000)) + # makes it easier to
    scale_y_continuous(breaks = seq(240000, 350000, 5000)) + # locate points on map
    coord_equal() +
    theme_minimal() +
    geom_point(data = jul2012,
               size = 2,
               pch = 21,
               alpha = 0.6,
               colour = "white",
               aes(x = long, y = lat, group = NULL,
               fill = as.factor(Crime.type))
               ) +
    theme(legend.position = "none")

# now remove points that are not contained within polygon of interest
pts <- SpatialPoints(jul2012[, c('long','lat')], proj4string = norfolkCounty@proj4string)
pts.over <- over(pts, norfolkCounty)
print(str(pts.over)) # check
pts.bad <- rownames(pts.over[is.na(pts.over$IDENTIFI0), ])
print(jul2012[pts.bad, ]) # how many do we have
jul2012.good <- jul2012[!(rownames(jul2012) %in% pts.bad), ]

ggplot(data = norfolk, aes(x = long, y = lat, group = group)) +
    geom_polygon(colour = "black", fill = "white") +
    scale_x_continuous(breaks = seq(500000, 700000, 5000)) +
    scale_y_continuous(breaks = seq(240000, 350000, 5000)) +
    coord_equal() +
    theme_minimal() +
    geom_point(data = jul2012.good,
               size = 2,
               pch = 21,
               alpha = 0.6,
               colour = "white",
               aes(x = long, y = lat, group = NULL,
               fill = as.factor(Crime.type))
               ) +
    theme(legend.position = "none")

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