为数据帧制作水平存在的热图

时间:2017-05-13 07:09:34

标签: r latitude-longitude heatmap levels

我有数据框包含生物观察。对于每次观察,我都有纬度,经度和物种名称

我想要做的是生物多样性/物种丰富度的热图(一个地方不同物种的数量)。我不想做我观察的热图,而是它的物种多样性。

我确信这是一种优雅的方式。这就是我需要你帮助的原因。

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

否则我打算:

  • 将地图划分为正方形
  • 检查适合广场的子数据中是否存在等级
  • 将此方块的种类数添加到数据框中(一种长度(级别(子集(数据,方形中的lon和lat)))
  • 我的数据帧级别计数的热图 我真的不喜欢这种方法,因为我的地图划分了很多我的代码。

感谢您的阅读。我希望你的眼睛不会因为我的英语而流血。

阿基姆

1 个答案:

答案 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')

enter image description here