2013-05-05 17 views
17

Ayrı veri çerçevelerinden veri kullanarak ggplot2 numaralı bir harita oluşturmaya çalışıyorum. Her şey beklendiği gibi çalışır ve ben güzel harita olsun Bu noktaya kadarggplot2'de, nasıl ek bir gösterge ekleyebilirim?

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

: Ben ancak değiştirmek istiyorum ne

enter image description here

xx.sub1.df verilerine için ayrı efsane eklemektir - beri tüm çokgenler sadece gri ile doludur, umarım bir ek giriş olacaktır.

Bunu nasıl başarabilirim?

+3

tekrarlanabilir örnek (http://tinyurl.com/reproducible-000) lütfen? Bu problemi çözmenin kanonik yolu, her veri kümesinin hangi orijinal veri çerçevesinin geldiğini belirleyen bir faktör değişkenini içeren veri kümelerini birleştirmek, ardından bir estetik kullanmak (sizin için dolulukta, sanırım). Başka bir yol var mı diye görmek için "ölçekler" paketi –

+0

@BenBolker Roger. Örnek eklendi. Tek bir df içinde herşeye sahip olmanın daha kolay olacağını biliyordum. Bununla birlikte, sıklıkla farklı veri katmanlarıyla (GIS arka planından gelme konusundaki önyargılarım olabilir) çalışıyorum, bu da boyundaki bir ağrının katılması olacaktır. Ve bu özel örnekte birkaç çokgen seçmem ve bunları hızlı bir şekilde 'vurgula' ya da 'maskelendirmem' gerekiyor. – radek

+0

Verilerinize bir "dput" ekleyebilir misiniz? Böylece, sorunuzu, güncellenmiş bir heatmap ile yanıtlayabilirsiniz. Bunu tahmin ediyorum: (1) xx.sub2'nin yalnızca 2 sütununu kullanırsınız, (x) xx.sub1'de mevcutsa gri görünür. Bu nedenle katılma bu can sıkıcı görünmüyor. Xx.sub1'deki girdiler için xx.sub2'ye bir faktör ekleyebilir ve efsanedeki renkleri ayarlamak için belki de scale_fill_manual' işlevini kullanabilirsiniz. –

cevap

23

İstediğiniz bu olduğundan emin değilim, ancak sorunu anladığım kadarıyla anladım. Kullanılmayan bazı geom ile xx.sub1.df arasındaki herhangi bir veriyi eşleştirsek, ancak bunu arsa üzerinde görünmez hale getirecek olursak, geom için hala bir gösterge elde edebiliriz. Burada geom_point'u kullandım, ancak başkalarını da yapabilirsiniz.

enter image description here

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

Şimdi sadece (bu earlier gösterdi @DizisElferts sayesinde) efsanesine noktanın boyutunu ve şeklini değiştirebilir ve efsane adını değiştirmek gerekir. Eğer göstermek istediğim şey vurgulamak için etiketler çalışmak ya da her türlü şeklini değiştirebilirsiniz Tabii

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

enter image description here

.

Eğer peşinde olmadığınız şey bu değilse, haberim olsun!

+0

Bu güzel! Bana bir efsanenin eklenebileceği yeni bir estetik (burada “geom_point”) eklemekten başka bir çözüm olmadıklarını düşündüm. 'Shape = NA' hakkında hiçbir şey bilmiyordum, bu gerçekten faydalı. –

İlgili konular