2016-05-25 13 views
11

Bazı eksik değerleri olan 2 boyutlu bir veri dizim var.R'de iki boyutlu enterpolasyon, herhangi bir ekstrapolasyon olmadan

  • x
  • y
  • yoğunluğu

bir renk skalası olarak yoğunluk ile, ggplot2 olarak y karşı x çizmek: Üç sütun vardır.

enter image description here

Ben renkler arasındaki geçişleri yumuşatmak istiyorum ve gstat paketinden, idw fonksiyonu rastlamak var. idw, NA'ları 2 boyutlu olarak enterpole etmeyi amaçlar. Anlaşılmamalıdır ve teknik olarak verilerin sınırlarına (her iki yönde de ± 20) uymakla kalmaz, aynı zamanda aşağıda görüldüğü gibi, arsa kenarındaki boşlukları doldurmaya yönelik bir girişimde bulunur:

enter image description here

İlk resimde gösterilen verilerin sağ alt kısmı dahil olmak üzere sahip olduğum verilerin sınırları dışında meydana gelen herhangi bir ekstrapolasyondan kaçınmak istiyorum.

Bunu nasıl başarabilirim?

Edit: İşte bir örnek veri kümesi. Bu, tam olarak yukarıda gösterildiği gibi aynı veri kümesi değildir, ancak yine sağ alt köşede büyük bir eksik bölge içerir. Ne yapmaya çalışıyorsunuz anlamak ise

structure(list(x = c(10L, 15L, -10L, 0L, -5L, -10L, -15L, 0L, 
-15L, 15L, 5L, 10L, -20L, -5L, -15L, -15L, -5L, 5L, 20L, -20L, 
-15L, 20L, -15L, 5L, -5L, -20L, -5L, 15L, 0L, 0L, 15L, 10L, 0L, 
20L, -10L, 5L, 5L, 0L, 20L, 5L, -15L, 5L, -5L, -5L, -15L, -10L, 
-10L, -10L, -5L, -10L, 15L, 20L, 0L, 20L, -15L, 20L, -20L, -15L, 
10L, 15L, 15L, -5L, 5L, 15L, 20L, 20L, -10L, -20L, -20L, 15L, 
-10L, 10L, 5L, -20L, 20L, 10L, 0L, 10L, -10L, 0L, 10L, 10L, 10L, 
-20L, 15L, -20L, 0L, -20L, -5L, 5L), y = c(0L, -10L, 0L, 20L, 
0L, -10L, 0L, 0L, -20L, 20L, 0L, -10L, -10L, -10L, -10L, 20L, 
10L, -10L, -20L, -20L, -10L, -10L, 0L, 10L, -20L, 20L, 0L, 0L, 
0L, -20L, 0L, 0L, 10L, 10L, -20L, -20L, -10L, 20L, 10L, 20L, 
10L, -20L, 20L, -10L, 20L, 20L, 10L, 10L, -20L, -10L, -10L, 20L, 
-10L, -10L, -20L, 0L, -10L, 10L, -10L, 10L, -20L, 10L, 20L, 20L, 
-20L, 20L, 0L, 10L, 10L, -20L, 20L, -20L, 10L, 0L, 0L, 10L, 10L, 
-20L, -20L, -20L, 20L, 20L, 10L, 20L, 10L, -20L, -10L, 0L, 20L, 
0L), intensity = c(12.9662, NA, 24.4379, 26.3923, 26.9449, 16.7372, 
13.7691, 8.029, 11.922, 11.1967, 15.2792, NA, 14.4159, 20.6542, 
22.0509, 17.356, 14.3841, NA, NA, 10.326, 6.0451, NA, 12.9515, 
3.6745, NA, 18.1552, 9.9532, 9.9361, 7.0392, NA, 10.9814, 10.8351, 
4.9017, 5.7864, 14.098, NA, NA, 6.3305, 6.4405, 49.2791, 19.9774, 
NA, 25.1955, 28.5234, 20.2077, 20.3224, 12.688, 22.1371, NA, 
17.5108, NA, 7.9351, NA, NA, 11.0975, 8.2349, 12.1194, 21.865, 
NA, 10.7178, NA, 21.8222, 13.5971, 6.9751, NA, 8.8046, 22.0709, 
14.2043, 27.8561, NA, 17.4329, NA, 7.4057, 15.2797, 1.0122, 11.1874, 
35.5814, NA, 27.5919, NA, 11.8159, 15.8433, 12.297, 29.1978, 
20.4151, 22.6336, NA, 16.0019, 16.9746, 10.8613)), .Names = c("x", 
"y", "intensity"), row.names = c(NA, -90L), class = "data.frame") 
+0

Az önce hiçbir veriye sahip Nas bırakarak, istediğiniz ızgara boyutuna orijinal verileri resample olabilir. Ardından, IDW çıktınızı maskelemek için yeniden örneklenen verileri kullanın. –

+0

Bulunduğunuz bölgede yüksek yoğunluklu bir noktaya rastladığınızı merak ediyorum (yaklaşık 5, -20). İddia ettiğim kadarıyla, bu olmamalı. –

cevap

6

, sen önce interpolating için NA kaldırarak ggplot2 baz yöntemleriyle yapabilirsiniz. içinde

library(ggplot2) 

data<-data.frame(data) 
data_NA.rm<-data[!is.na(data$intensity),] 

ggplot(data=data_NA.rm,aes(x=x,y=y))+ 
     geom_raster(aes(fill=intensity),interpolate=TRUE) 

Sonuçlar:

enter image description here

İlgili konular