2013-05-05 31 views
17

Tôi đang cố gắng xây dựng bản đồ ở số ggplot2 bằng cách sử dụng dữ liệu từ các khung dữ liệu riêng biệt.Trong ggplot2, làm cách nào để thêm chú thích bổ sung?

library(maptools) 

xx <- readShapePoly(system.file("shapes/sids.shp", package="maptools")[1], IDvar="FIPSNO", proj4string=CRS("+proj=longlat +ellps=clrk66")) 

xx.sub1 <- subset(xx, xx$FIPSNO < 37010) 
xx.sub2 <- subset(xx, xx$FIPSNO > 37010) 

[email protected]$id <- rownames([email protected]) 
xx.sub1.points <- fortify(xx.sub1, region="id") 
xx.sub1.df = join(xx.sub1.points, [email protected], by="id") 

[email protected]$id <- rownames([email protected]) 
xx.sub2.points <- fortify(xx.sub2, region="id") 
xx.sub2.df = join(xx.sub2.points, [email protected], by="id") 

ggplot(xx.sub2.df) + 
    aes(long, lat, fill = (SID79/BIR79)*1000, group = group) + 
    geom_polygon() + geom_path(color="grey80") + 
    coord_equal() + 
    scale_fill_gradientn(colours = brewer.pal(7, "YlOrBr")) + 
    geom_polygon(data = xx.sub1.df, fill = "grey50") + 
    geom_path(data = xx.sub1.df, color="grey80") + 
    labs(fill = "Mapped value", title = "Title") 

Tính đến thời điểm này mọi thứ hoạt động như mong đợi và tôi nhận được một bản đồ đẹp:

enter image description here

Những gì tôi muốn thay đổi tuy nhiên là thêm huyền thoại riêng cho dữ liệu từ xx.sub1.df - kể từ tất cả các đa giác chỉ đầy màu xám Tôi hy vọng nó sẽ là một mục bổ sung.

Làm cách nào để đạt được điều đó?

+3

ví dụ có thể tái sản xuất (http://tinyurl.com/reproducible-000) vui lòng? Cách hợp lý để giải quyết vấn đề này là hợp nhất các tập dữ liệu, bao gồm biến yếu tố xác định khung dữ liệu gốc mà mỗi tập dữ liệu xuất phát, sau đó sử dụng thẩm mỹ (trong trường hợp của bạn để điền, tôi nghĩ) ... bạn có thể xem gói 'scale' để xem liệu có cách nào khác là –

+0

@BenBolker Roger không. Đã thêm ví dụ. Tôi biết rằng nó sẽ là cách dễ dàng hơn để có tất cả mọi thứ trong một df. Tuy nhiên, tôi thường làm việc với các lớp dữ liệu khác nhau (có thể là sự thiên vị của tôi đến từ nền GIS) mà có thể là một nỗi đau ở cổ để tham gia. Và trong ví dụ cụ thể này, tôi cần phải chọn vài đa giác và 'đánh dấu' hoặc 'che' chúng một cách nhanh chóng. – radek

+0

Bạn có thể thêm 'dữ liệu' của dữ liệu để có thể trả lời câu hỏi của bạn bằng bản đồ nhiệt được cập nhật không? Tôi đoán rằng: (1) bạn chỉ sử dụng 2 cột 'xx.sub2', (2) trạng thái xuất hiện màu xám nếu chúng xuất hiện trong' xx.sub1'. Do đó tham gia dường như không gây phiền nhiễu. Bạn có thể chỉ cần thêm một yếu tố trong 'xx.sub2' cho các mục nhập trong' xx.sub1' và có thể sử dụng 'scale_fill_manual' để điều chỉnh màu trong chú giải. –

Trả lời

23

Tôi không chắc chắn 100% đây là những gì bạn muốn, nhưng đây là cách tôi tiếp cận vấn đề khi tôi hiểu. Nếu chúng tôi lập bản đồ một số không sử dụng geom với bất kỳ dữ liệu nào từ xx.sub1.df, nhưng làm cho nó ẩn trên cốt truyện, chúng tôi vẫn có thể nhận được một huyền thoại cho rằng geom. Ở đây tôi đã sử dụng geom_point, nhưng bạn có thể làm cho người khác.

p <- ggplot(xx.sub2.df) + 
    aes(long, lat, fill = (SID79/BIR79)*1000, group = group) + 
    geom_polygon() + geom_path(color="grey80") + 
    coord_equal() + 
    scale_fill_gradientn(colours = brewer.pal(7, "YlOrBr")) + 
    geom_polygon(data = xx.sub1.df, fill = "grey50") + 
    geom_path(data = xx.sub1.df, color="grey80") + 
    labs(fill = "Mapped value", title = "Title") 

#Now we add geom_point() setting shape as NA, but the colour as "grey50", so the 
#legend will be displaying the right colour 

p2 <- p + geom_point(data = xx.sub1.df, aes(size="xx.sub1", shape = NA), colour = "grey50") 

enter image description here

Bây giờ chúng ta chỉ cần thay đổi kích thước và hình dạng của các điểm trên truyền thuyết, và thay đổi tên của huyền thoại (nhờ @DizisElferts ai chứng minh điều này earlier).

p2 + guides(size=guide_legend("Source", override.aes=list(shape=15, size = 10))) 

enter image description here

Tất nhiên bạn có thể thay đổi cách thức các nhãn làm việc hoặc bất cứ điều gì để làm nổi bật những gì bạn muốn hiển thị.

Nếu đây không phải là những gì bạn đang theo dõi, hãy cho tôi biết!

+0

Thật tuyệt! Dường như với tôi rằng họ không còn cách nào khác ngoài việc thêm một thẩm mỹ mới (ở đây 'geom_point') mà một huyền thoại có thể được thêm vào. Tôi không biết về 'hình dạng = NA', vì vậy nó thực sự hữu ích. –

Các vấn đề liên quan