olarak ayarlandığında, raster çiziminin beklendiği gibi çalışmaz. İlk gönderiyi görüyorum, umarım web sitesi görgü kurallarını gözlemliyorum. Sitede bulamadım ve cevap veremedim ve daha önce bunu ggplot2'ye özgü bir gruba gönderdim, ancak henüz çözüm bulunamadı.ggplot2: alfa değerleri
Temel olarak ggplot2 kullanarak iki rasterin üzerine basmaya çalışıyorum ve üstteki öğenin yarı saydam olmasını istiyorum. Bir elevasyon veri rasterinden hesaplanan bir hillShade rasterim var ve yükseliş rasterinin tepesi tiftik rasterinin üzerine yerleştirilmesini istiyorum, böylece elde edilen arsa 'düz' görünmüyor. Aşağıdaki tekrarlanabilir R kodunda ne demek istediğimi görebilirsiniz.
Temel grafikleri kullanarak istenen sonucu elde edebilirim ve ne demek istediğimi netleştirmek için aşağıdaki kod örneğini ekledim, ancak bunu ggplot2'de yapmam gerekiyor.
Ggplot2'de çalışamıyorum. Rasterleri birleştirmek renkleri eğlenceli hale getirir (her birini kendi başına çizebilirim). Herkes bana doğru yönde yardım edebilir veya işaret edebilir. Aşağıda yer alan kendinden geçmiş, tekrarlanabilir kod örneği. (Uzunluğun için üzgünüm, ama daha iyi olacağını düşündüm).
# Load relevant libraries
library(ggplot2)
library(raster)
# Download sample raster data of Ghana from my Dropbox
oldwd <- getwd()
tmp <- tempdir()
setwd(tmp)
url1 <- "http://dl.dropbox.com/s/xp4xsrjn3vb5mn5/GHA_HS.asc"
url2 <- "http://dl.dropbox.com/s/gh7gzou9711n5q7/GHA_DEM.asc"
f1 <- file.path(tmp,"GHA_HS.asc")
f2 <- file.path(tmp,"GHA_DEM.asc")
download.file(url1,f1) #File is ~ 5,655Kb
download.file(url2,f2) #File is ~ 2,645Kb
# Create rasters from downloaded files
hs <- raster(f1)
dem <- raster(f2)
# Plot with base graphics to show desired output
plot(hs,col=grey(1:100/100),legend=F)
plot(dem,col=rainbow(100),alpha=0.4,add=T,legend=F)
# Convert rasters TO dataframes for plotting with ggplot
hdf <- rasterToPoints(hs); hdf <- data.frame(hdf)
colnames(hdf) <- c("X","Y","Hill")
ddf <- rasterToPoints(dem); ddf <- data.frame(ddf)
colnames(ddf) <- c("X","Y","DEM")
# Create vectors for colour breaks
b.hs <- seq(min(hdf$Hill),max(hdf$Hill),length.out=100)
b.dem <- seq(min(ddf$DEM),max(ddf$DEM),length.out=100)
# Plot DEM layer with ggplot()
p1 <- ggplot()+
layer(geom="raster",data=ddf,mapping=aes(X,Y,fill=DEM))+
scale_fill_gradientn(name="Altitude",colours = rainbow(100),breaks=b.dem)+
scale_x_continuous(name=expression(paste("Longitude (",degree,")")),limits=c(-4,2),expand=c(0,0))+
scale_y_continuous(name=expression(paste("Latitude (",degree,")")),limits=c(4,12),expand=c(0,0))+
coord_equal()
print(p1)
# Plot hillShade layer with ggplot()
p2 <- ggplot()+
layer(geom="raster",data=hdf,mapping=aes(X,Y,fill=Hill))+
scale_fill_gradientn(colours=grey(1:100/100),breaks=b.hs,guide="none")+
scale_x_continuous(name=expression(paste("Longitude (",degree,")")),limits=c(-4,2),expand=c(0,0))+
scale_y_continuous(name=expression(paste("Latitude (",degree,")")),limits=c(4,12),expand=c(0,0))+
coord_equal()
print(p2)
# Try to plot both together with transparency on the DEM layer
p3 <- ggplot(hdf)+
geom_raster(aes(X,Y,fill=Hill))+
scale_fill_gradientn(colours=grey(1:100/100),breaks=b.hs,guide="none")+
scale_x_continuous(name=expression(paste("Longitude (",degree,")")),limits=c(-4,2),expand=c(0,0))+
scale_y_continuous(name=expression(paste("Latitude (",degree,")")),limits=c(4,12),expand=c(0,0))+
geom_raster(data=ddf,aes(X,Y,fill=DEM),alpha=I(0.4))+
scale_fill_gradientn(name="Altitude",colours = rainbow(100),breaks=b.dem)+
coord_equal()
print(p3)
# Cleanup downloaded files and return to previous wd
unlink(tmp,recursive=T)
setwd(oldwd)
Benim sorulara
aşağıdaki gibidir:S1: yukarıdaki örnekteki baz grafiklerle çizilen ne zaman gibi nasıl p3 görünüm katmanlarını yapabilir?
S2: Renk ölçeklerini daha mantıklı bir şekilde nasıl belirleyebilirim ki RHS'de saçma bir efsaneye sahip değilim?
Ben 'annotation_raster' kullanmak için bir yol olacağını eminim - ama benim girişimleri şimdiye kadar sonuçsuz olmuştur. Kombinasyon arızanızın sebebi (gördüğüm gibi), 'scale_fill_gradientn' – mnel
' un iki katıdır. Görünüşe göre bir “ggplot” sadece bir “dolgu” estetiğine ve bir “renk” estetiğine sahip olabilir.DEM katmanını "color = DEM" ile bir "geom_point" haline getirerek ve "scale_fill_gradientn" yerine "scale_colour_gradientn" yi kullanarak işlerin bu tür şeyler elde edebilirsiniz, ancak temel grafik tarzı kadar iyi görünmüyor. –
Sorunuma baktığınız için teşekkürler, ikiniz de! @mplourde - Ggplot2'nin katman başına bir dolgu estetiğine sahip olabileceğini düşünüyorum, ancak alfa saydamlığının olduğu yerlerde renklerin katmanlar ile örtüştüğü addidtive renk karışımını kullanarak birleştirdiğini düşünüyorum. Her nasılsa bu karıştırma ggplot2'de taban grafiğinden farklıdır. Bunun hakkında düşünüyordum ve yapmam gereken şeyin elle elle çizilmiş renkleri storShade rasterindeki ilgili gri tonlama değerinden hesaplamasıdır (bence bu hcl renginde renkliliktir) model) ve DEM rasterinden gelen ton (bunun renk olacağını düşünüyorum). –