我有数据框包含生物观察。对于每次观察,我都有纬度,经度和物种名称。
我想要做的是生物多样性/物种丰富度的热图(一个地方不同物种的数量)。我不想做我观察的热图,而是它的物种多样性。
我确信这是一种优雅的方式。这就是我需要你帮助的原因。
以下是我的数据示例:https://filesender.ens-lyon.fr/?vid=1de55ca8-7e1d-6b29-4a28-00004e605af1
否则我打算:
感谢您的阅读。我希望你的眼睛不会因为我的英语而流血。
阿基姆
答案 0 :(得分:0)
可能不是最优雅的方式,但它制作了热图。我使用了对称的断点,但是你可以单独调整它们(还有bin宽度)。你可以使用heatmaps.2来获得自动传奇。
require(plyr)
mydf <- read.csv('data_observation.csv')
#Bin longitude and latitude
lat_breaks <- seq(-160,175,5)
long_breaks <- seq(-160,175,5)
mydf$lat <- cut(mydf$latitude,breaks = lat_breaks, labels=F)
mydf$long <- cut(mydf$longitude,breaks = long_breaks, labels=F)
#Aggregate observations
mydf <- ddply(mydf, .(lat,long), summarize, div=length(unique(specname)))
#Build the map
mymap <- cbind(lat=rep(1:length(lat_breaks), each=length(long_breaks)),
long=rep(1:length(long_breaks), length(lat_breaks)))
mymap <- merge(mymap,mydf, by=c('lat','long'), all.x=T)
mymap <-dcast(mymap, lat~long, drop = F,)[,-1]
#Plot
heatmap(as.matrix(mymap),Rowv = NA,Colv = NA, scale = 'none',
col=topo.colors(256),labRow = lat_breaks, labCol = long_breaks,
xlab='latitude', ylab='longitude')