R'de görsel olarak çekici yoğunluklu ısı haritaları oluşturma


27

R'de ısı haritaları oluşturmak için bir dizi fonksiyon olduğunu bilmeme rağmen, sorun görsel olarak çekici haritalar üretemem. Örneğin, aşağıdaki resimlerden kaçınmak istediğim iyi ısı haritaları örnekleri. Birincisi açıkça ayrıntıdan yoksun, diğeri (aynı noktalara dayanarak) faydalı olamayacak kadar ayrıntılı. Her iki grafik de spatstat R paketindeki density () işleviyle oluşturulmuştur .

Alanlarımda nasıl daha fazla "akış" yapabilirim? Hedeflediğim şey , ticari SpatialKey ( ekran görüntüsü ) yazılımının üretebileceği sonuçların görünümü.

Beni bu yöne götürebilecek herhangi bir ipucu, algoritma, paket veya kod satırı var mı?

görüntü tanımını buraya girin


image () işlevine baktınız mı? Ara sayısını artırmak, çözünürlüğü artırır.
Makro

Yanıtlar:


28

Grafiğin düzgünlüğünü, çekirdek yoğunluğu tahmininiz için kullanılan bant genişliğini ve arsaya renk atadığınız kırılmaları etkileyecek iki şey vardır.

Tecrübelerime göre, keşif analizi için yararlı bir komplo elde edene kadar bant genişliğini ayarlıyorum. Aşağıdaki gösteri.

library(spatstat)
set.seed(3)
X <- rpoispp(10)
par(mfrow = c(2,2))
plot(density(X, 1))
plot(density(X, 0.1))
plot(density(X, 0.05))
plot(density(X, 0.01))

görüntü tanımını buraya girin

Basitçe varsayılan renk şemasını değiştirmek hiçbir işe yaramayacak ya da piksellerin çözünürlüğünü değiştirmeyecektir (eğer varsayılan çözünürlük çok kesinse herhangi bir şey varsa ve çözünürlüğü azaltmalı ve pikselleri büyütmelisiniz). Estetik amaçlar için varsayılan renk şemasını değiştirmek isteyebilseniz de, oldukça ayırt edici olması amaçlanmıştır.

Renge yardımcı olmak için yapabileceğiniz şeyler, ölçek seviyesini logaritma olarak değiştirmektir (gerçekten çok homojen olmayan bir işleminiz varsa gerçekten yardımcı olacaktır ), renk paletini alt uçta daha fazla değişecek şekilde değiştirin (renk rampası özelliği açısından önyargı) R), ya da göstergeyi sürekli yerine ayrı kutulara sahip olacak şekilde ayarlayın.

Buradan uyarlanan göstergede önyargı örnekleri var ve GIS sitesinde, ayrık kutuların oldukça basit bir örnekte renklendirilmesini açıklayan başka bir görevim var . Bunlar, desen başlangıçta olsa düzleştirilmiş veya pürüzsüzleştirilmiş olsa da yardımcı olmaz.

Z <- density(X, 0.1)
logZ <- eval.im(log(Z))
bias_palette <- colorRampPalette(c("blue", "magenta", "red", "yellow", "white"), bias=2, space="Lab")
norm_palette <- colorRampPalette(c("white","red"))
par(mfrow = c(2,2))
plot(Z)
plot(logZ)
plot(Z, col=bias_palette(256))
plot(Z, col=norm_palette(5))

görüntü tanımını buraya girin


Renkleri son görüntüde saydam yapmak için (ilk renk bölmesinin beyaz olduğu yerde) renk rampasını oluşturabilir ve ardından RGB özelliğini saydam renklerle değiştirebilir. Yukarıdaki ile aynı verileri kullanarak aşağıdaki örnek.

library(spatstat)
set.seed(3)
X <- rpoispp(10)
Z <- density(X, 0.1)
A <- rpoispp(100) #points other places than density


norm_palette <- colorRampPalette(c("white","red"))
pal_opaque <- norm_palette(5)
pal_trans <- norm_palette(5)
pal_trans[1] <- "#FFFFFF00" #was originally "#FFFFFF" 

par(mfrow = c(1,3))
plot(A, Main = "Opaque Density")
plot(Z, add=T, col = pal_opaque)
plot(A, Main = "Transparent Density")
plot(Z, add=T, col = pal_trans)


pal_trans2 <- paste(pal_opaque,"50",sep = "")
plot(A, Main = "All slightly transparent")
plot(Z, add=T, col = pal_trans2)

görüntü tanımını buraya girin


Teşekkürler, çok net bir şekilde sinirli cevap. Bu numarayı yapmak için sıraladığınız "spatstat.options (npixel = c (100,100))" komutuyla birleştirildi. Eğer sizi biraz daha rahatsız edebilirsem: "Arka plan" rengini nasıl şeffaf hale getirebileceğimi biliyor musunuz?
Figaro

1
@Figaro, renkleri yarı saydam yapma örneği ile güncellendi.
Andy,

Teşekkür ederim. Bir şey daha. Bu konu biraz kapalı olsa da: Bu ısı haritalarını bir Shape dosyasına nasıl aktarabilirim? Yoksa onlara sadece raster olarak davranmam gerekiyor mu?
Figaro

Bunu yapmak zorunda kalmamıştım, bu yüzden hazırlıksız diyemem. Muhtemelen R gurusu için yığın akışında iyi bir soru.
Andy W,

Bir ısı haritası bir rasterden başka bir şey olarak sunulabilir mi?
Figaro

2

Akima paketindeki interp işlevinden yararlanabilirsiniz. Bu, gerekirse matrisinizi başka bir çözünürlüğe enterpolasyon yapmanıza olanak tanır. Bağlantılı örneğiniz gibi bir şey yapmak için, oldukça ince bir ızgaraya enterpolasyon yapmanız gerekir (belki xo ve yo'nun ~ 1000 uzunluğunda olduğu iddialarıyla). Bu size image () ile çizebileceğiniz yeni bir matris verecektir. Şeffaflık istiyorsanız, bu biraz ek iş gerektirecektir. Bunu bir renk paleti ile yapmak kolay değildir, bu nedenle her bir ızgarayı atanmış bir renkle bir çokgen olarak çizmek zorunda kalabilirsiniz.


Şeffaflığı yaratma konusunda deneyiminiz var mı? Örnekler var mı Bu bir sonraki adım olur.
Figaro

İnterp () için gereken x, y, z değerlerini nasıl oluşturabilirim? Örneğin, yoğunluk () bir 100x100 ızgara kullanıyorsa, her nokta için z değerlerine sahibim, ancak gerekli vektör biçiminde x & y yok (yalnızca eksenlerin koordinatlarına sahibim).
Figaro

Koordinat çiftlerini almak için bir döngü yaptım, ancak bunun bir işlevi var mı?
Figaro

2
Sonuçta görüntü saydam renkleri kabul edebilir gibi görünüyor. Bakınız: menugget.blogspot.de/2012/04/… . Hala interp kullanmak istemeniz durumunda, z seviyeleriniz için xy koordinat kombinasyonlarınızı şununla oluşturabilirsiniz: "grid <- expand.grid (x = x, y = y)"
Marc,

1

Ggplot2 içine bakmak isteyebilirsiniz. Çalıştığınız paketin harika bir renk şeması veya "akışı" yok gibi görünüyor - RColorBrewer'a bir göz atın. Bu paketi basit bir örnekle uyguladığı bir blog var .

Eğer bağlantılı örnekte gösterildiği gibi coğrafi verileri çizmek çalışıyorsanız ben değil eminim ama bunu yaparsanız Google teklifler "Statik Maps API V2 Geliştirici Kılavuzu" ve biliyorum Google ve R birleştirmek , RgoogleMaps adında bir paketle .

Araştırmanız için iyi şanslar.


Net değil miydim ama şu anda sorun renk şemasının kendisi değil. Ancak bugün erken saatlerde RColorBrewer'ı denedim: harika bir küçük pacakge! Mekansal veri, Google API'ları kullanmak istediğimden emin değilim, ancak bir göz atabilirim.
Figaro

0

Çözünürlüğü arttırmayı denedin densitymi? Argümanı dimyx=c(512, 512)veya daha fazlasını deneyin .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.