2011-09-22 38 views
10

Mục tiêu của tôi là vẽ đường đi của một con sông với các điểm chỉ ra các địa điểm quan trọng gần sông.Overplotting từ các khung dữ liệu khác nhau trong ggplot2

Tôi có hai khung dữ liệu, đưa ra sông và chỗ tọa độ tương ứng:

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)) 

Sử dụng một âm mưu trường R cũ, với mệnh (mới = T) và bảo tồn xlim và ylim, tôi sẽ nhận được một cái gì đó như này:

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

Nhưng tôi muốn làm điều đó bằng ggplot2. Con sông và các điểm có thể dễ dàng gọi riêng:

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

Tôi đã cố gắng để lừa, bằng cách tạo ra các khung dữ liệu sau đây từ trước đó hai:

> 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

Nó hoạt động, nhưng việc tạo khung dữ liệu mới này không đơn giản như phương thức par cũ (new = T).

Có cách nào đơn giản hơn để ghi đè từ các khung dữ liệu riêng lẻ bằng ggplot2 không?

Cảm ơn!

+0

Tôi sẽ sử dụng các lớp học được thiết kế để xử lý dữ liệu không gian, cụ thể là SpatialPoints và SpatialLines được định nghĩa trong 'gói sp'. –

+0

Bản sao của http://stackoverflow.com/questions/7476022/geom-point-and-geom-line-for-multiple-datasets-on-same-graph-in-ggplot2 – kmm

+1

@Kevin, không phải là bản sao chính xác, nhưng cảm ơn vì đã đăng bài vì nó đã giúp tôi tìm câu trả lời. – susjoh

Trả lời

17

Dưới đây là một cách để làm điều đó

ggplot(samploc, aes(x = long, y = lat)) + 
    geom_point() + 
    geom_text(aes(label = site), vjust = 2) + 
    geom_line(data = river, aes(y = lat)) 
Các vấn đề liên quan