制作数据框级别存在的热图

Make heatmap of presence of levels for a dataframe

我有一个 包含 生物学观察的数据框。对于每个观察结果,我有 纬度、经度和物种名称

我想要做的是 biodiversity/species 丰富度 (一个位置不同物种的数量)的热图。我不想做我的观察的热图,而是其中的物种多样性。

我确信它存在一种优雅的方式来做到这一点。这就是为什么我需要你的帮助。

这是我的数据示例:https://filesender.ens-lyon.fr/?vid=1de55ca8-7e1d-6b29-4a28-00004e605af1

否则我打算:

感谢您的阅读。希望你们不要因为我的英语而流泪

阿基姆

可能不是最优雅的方式,但它可以制作热图。我使用对称中断,但您可以单独调整它们(以及 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')