2011-07-28 15 views
8

nasıl ggplot kullanarak mekansal raster harita arsa efsanesini geliştirebilirim? Ben ggplot kullanarak arsa mekansal haritalar istiyoruzSpplot ile karşılaştırıldığında ggplot kullanarak uzaysal raster haritayı nasıl geliştirebilirim? Bir spplot() Efsaneye göre

() yerine ssplot ait() ancak spplot karşılaştırıldığında ben geliştirmek istiyorum birkaç şey vardır:

  1. gider bir ggplot açıklama oluşturmak Ben sınırları her bir rengin ne olduğunu bilmek çok büyük değerler (üst)
  2. küçük (alt) ssplot() Efsaneye benzer ggplot efsanede molalar verin.

## load packages 
require(raster) 
require(ggplot2) 
require(rgdal) 
require(RColorBrewer) 
set.seed(1) 

r <- raster(xmn=-110, xmx=-90, ymn=40, ymx=60, ncols=40, nrows=40, 
      crs="+proj=lcc +lat_1=48 +lat_2=33 +lon_0=-100 
+ellps=WGS84") 
r <- setValues(r,matrix(rnorm(1600, mean=0.4,sd=0.2))) 

## 1. spatial map with spplot 
cuts <-seq(minValue(r),maxValue(r),length.out=8) 
cuts = round(cuts,digits=2) 
col.regions = brewer.pal(length(cuts)+3-1, "RdYlGn") 
print( 
spplot(as(r, 'SpatialGridDataFrame'),at=cuts, 
col.regions=col.regions, 
colorkey=list(labels=list(at=cuts),at=cuts), pretty=TRUE, 
scales=list(draw=T) 
) 
) 

## 2. spatial map with ggplot 
p = rasterToPoints(r); df = data.frame(p) 
colnames(df) = c("x", "y", "NDVI") 

p <- ggplot(data=df) + geom_tile(aes(x, y, fill=NDVI)) + 
coord_equal() + labs(x=NULL, y=NULL) + 
scale_fill_gradient2(low="red", mid="yellow",high="green", 
limits=c(minValue(r),maxValue(r)), midpoint = 0.4) + theme_bw() + 
scale_x_continuous(expand=c(0,0)) + scale_y_continuous(expand=c(0,0)) 
print(p) 

ssplot()) ssplot

ggplot (sonuçlanabilir kafamın üst kapalı (1) nasıl ele emin değilim ggplot

+9

Lütfen kırmızı-yeşil renk kontrastlarını kullanmayın. Kırmızı-yeşil renk zayıflığı olan erkeklerin% 5-10'u onları [okumak çok zor] bulacak (http://vischeck.homeip.net/uploads/131191118210660/). – hadley

+0

Koske'nin sitesine bağlantı - az ya da çok yapmak istediklerimi gösterir. Daha fazla ggplot() kapasitesini keşfedeceğim, renkleri ayarlayacağım, efsaneyi geliştireceğim ve aşağıdan bir güncelleme yayınlayacağım. Tüm ipuçları/örnekler bekliyoruz. Teşekkürler – Janvb

cevap

5

sayesinde bu işaretçi için @joran. Muhtemelen bu deneyebilirsiniz

br <- seq(min(df$NDVI), max(df$NDVI), len=8) 

ggplot(data=df) + 
    geom_tile(aes(x, y, fill=NDVI)) + 
    scale_fill_gradient(low="red", high="green", 
    breaks=br, labels=sprintf("%.02f", br), 
    guide=guide_colorbar(title=NULL, nbin=100, barheight=unit(0.75, "npc"), label.hjust=1)) + 
    scale_x_continuous(expand=c(0,0)) + 
    scale_y_continuous(expand=c(0,0)) 

enter image description here

:

# from Hadley's instruction 
install.packages("devtools") 
library(devtools) 
dev_mode() # to avoid interfering with your existing install 
install_github("ggplot2", username="kohske", branch = "feature/new-guides-with-gtable") 
library(ggplot2) 

GÜNCELLEME: burada

burada

dev sürümünü kullanarak bir örnek kod ve çıkışı kurulum için talimat:

install.packages(
    c('devtools', 'digest', 'memoise', 'plyr', 'reshape2', 'RColorBrewer', 'stringr', 'dichromat', 'munsell', 'plyr', 'colorspace'), 
    dep=TRUE) 

library(devtools) 
dev_mode() 

install_github("scales") 
install_github("ggplot2", username="kohske", branch = "feature/new-guides-with-gtable") 
+0

Sadece denedim ama şu hatayı alıyorum: 'ggplot2_0.9.0.tar.gz' oluştururken HATA: bağımlılık 'ölçekleri' 'ggplot2' paketi için mevcut değil, 2.13.0 için ölçekler mevcut değil, nerede bulabilirim? Yukarıdaki gibi efsaneler yapmak harika olurdu. Harika. – Janvb

+0

Ben github https://github.com/hadley/scales üzerinde ölçekler buldum, R bu yüklemek için en iyi yolu nedir? – Janvb

+0

Yanıt güncellendi. install_github ("scales") 'ı deneyin. Eğer paketleri RColorBrewer, stringr, dichromat, munsell, plyr, colorspace' gibi kayıplar alırsanız, install.packages (c ('RColorBrewer', 'stringr', 'dichromat', 'munsell', 'plyr') deneyin. , 'colorspace'), dep = TRUE) ' – kohske

4

sonuçlanır. Ama burada (2) ve (3) için bazı olası çözümler.

Ben ggplot2 anda o şekilde efsanesini etiketleme özelliğine sahiptir inanmıyoruz. Ancak Koske bu tasımlı efsaneleri yaratan gelecekte ggplot2 içine yuvarlandı edilebilir bazı kod üzerinde çalışmaktadır. Here bir bağlantıdır, ancak bazı ek paketlerin yüklenmesi gerekecek ve sadece alfadır.

aradığınız spesifik sonlarını almak için, bu deneyin: benim makinede Bu grafiği üretti

br <- c(-0.25,-0.05,0.15,0.35,0.56,0.76,0.96,1.16) 
p <- ggplot(data=df) + geom_tile(aes(x, y, fill=NDVI)) + 
coord_equal() + labs(x=NULL, y=NULL) + 
scale_fill_gradient(low="red", mid="yellow",high="green", 
breaks = br) + theme_bw() + 
scale_x_continuous(expand=c(0,0)) + scale_y_continuous(expand=c(0,0)) 
print(p) 

: Ben test etmedim

enter image description here

bu görüneceğini Yukarıda belirtilen deneysel kodu kullanmak gibi.

+0

Ggplot kodunun iç yapısını hacklemeden alçaktan alçak bir efsane elde etmeyi düşünebilmemin tek yolu, ölçeği "cut" ile bir faktör haline getirmek, renkleri el ile atamak ve Düzeyleri ... –

+0

link de Koske site için teşekkürler, bu bir ggplot uzamsal haritanın efsanesi ile yapmak istediğim tam olarak budur. Bazı testler yapacağım yakında bir sonuç gönderecek. – Janvb

+0

kodların güncel olmadığını unutmayın. Lütfen bu gönderiyi ggplot2 listesine ekleyin: http://groups.google.com/group/ggplot2/browse_thread/thread/1026e8bf330deca2 – kohske

0

Re: (2) İlk cut() verileriniz binned veri kümesini alır. örneğin doğru etiketleri elde etmek cut() yılında breaks ve labels seçenekleri kullanın:

scale_fill_manual (your options...) + guides(fill=guide_legend(label.vjust = 1.2)) #1.2= what fits your legend best. Use label.hjust if using an horizontal color bar 

Ayrıca bkz: kullandıkları renk boudaries sağ böylece

dat$col <- cut(
    df$NDVI, 
    breaks=c(-Inf, -0.25, 0.05, ...whatever..., Inf), 
    labels=c(-0.25, 0.05, ...whatever..., "") 
) 

Sonra etiketleri ggplot kullanarak ve değişen çizebilirsiniz Generating a color legend with shifted labels using ggplot2

Alternatif olarak, oluşturabilir harici bir betikle renk efsanesi (örn. GrADS, doğru komut dosyalarını kullanarak güzel renk efsanelerini oluşturur) ve aynı renkleri scale_fill_manual'da elle belirtir.

İlgili konular