2011-09-22 15 views
10

Mi objetivo es trazar la ruta de un río con puntos que indican sitios importantes cerca del río.Overplotting desde diferentes marcos de datos en ggplot2

Tengo dos tramas de datos, dando al río y sitio de coordenadas, respectivamente:

river<-data.frame(
    long=c(-2.816452494909265,-2.845487331898639,-2.883036393822358), 
    lat=c(56.38229290416972,56.36346886284386,56.36577994637793)) 

samploc<-data.frame(
    site=c("Site1","Site2","Site3"), 
    long=c(-2.826213585663894,-2.816519300644918,-2.868437228090127), 
    lat=c(56.3649482229089,56.38166100310631,56.36716019476281)) 

Usando una vieja parcela escolar R, con el par (nuevo = T) y la conservación de xlim y ylim, me gustaría tener algo así como esto:

old school plot http://users.utu.fi/susjoh/Riverplot.png

Pero me gustaría hacerlo utilizando ggplot2. El río y los puntos se pueden llamar fácilmente de forma individual:

ggplot(river,aes(x=long,y=lat)) + geom_path() 
ggplot(samploc,aes(x=long,y=lat,lab=site)) + geom_point() + geom_text(vjust=2) 

me han tratado de engañar, mediante la creación de la siguiente trama de datos a partir de los dos anteriores:

> rivsamp 
    river.long river.lat samp.site samp.long samp.lat 
1 -2.816452 56.38229  NA  NA  NA 
2 -2.845487 56.36347  NA  NA  NA 
3 -2.883036 56.36578  NA  NA  NA 
4   NA  NA  Site1 -2.826214 56.36495 
5   NA  NA  Site2 -2.816519 56.38166 
6   NA  NA  Site3 -2.868437 56.36716 

ggplot(rivsamp) + 
    geom_path(aes(x=river.long,y=river.lat)) + 
    geom_point(aes(x=samp.long,y=samp.lat)) + 
    geom_text(aes(x=samp.long,y=samp.lat,lab=samp.site),vjust=2) 

ggplot2 plot http://users.utu.fi/susjoh/riverggplot.png

funciona, pero crear este nuevo marco de datos no es tan sencillo como el antiguo método par (nuevo = T).

¿Hay una manera más simple de sobrerrrollar de los marcos de datos individuales usando ggplot2?

Gracias!

+0

usaría clases diseñadas para manejar datos espaciales, a saber SpatialPoints y SpatialLines que se definen en el paquete 'sp'. –

+0

Duplicado de http://stackoverflow.com/questions/7476022/geom-point-and-geom-line-for-multiple-datasets-on-same-graph-in-ggplot2 – kmm

+1

@Kevin, no es un duplicado exacto, pero gracias por publicar, ya que me ayudó a encontrar la respuesta. – susjoh

Respuesta

17

Aquí es una manera de hacerlo

ggplot(samploc, aes(x = long, y = lat)) + 
    geom_point() + 
    geom_text(aes(label = site), vjust = 2) + 
    geom_line(data = river, aes(y = lat)) 
Cuestiones relacionadas