2017-05-13 10 views
-1

私は生物学的所見を含むデータフレームを持っています。各観測について、私はの緯度、経度および種名を持っています。データフレームのレベルのヒートマップを作成する

私がしたいのは、生物多様性/種の豊かさ(場所の異なる種の数)のヒートマップです。私は私の観察のヒートマップを望んでいませんが、その中の種の多様性を望んでいます。

私はそれを行うにはエレガントな方法が存在すると確信しています。だから私はあなたの助けが必要です。ここで

はexempleとしての私のデータである:https://filesender.ens-lyon.fr/?vid=1de55ca8-7e1d-6b29-4a28-00004e605af1

そうでなければ、私がすることを計画:正方形に

  • デバイドマップ
  • 平方
  • に合わせsubsetedデータ中のレベルのチェック有無
  • この正方形の種の数をデータフレーム(種類(レベル(サブセット(データ内の四角形内のデータ、lonおよびlat))の種類に追加します))
  • レベルカウントの私のデータフレームのヒートマッププロット 私のコードを複雑にする私のマップの分割のため、私はこのメソッドが本当に好きではありません。

お読みいただきありがとうございます。私はあなたの目が私の英語のために出血していないことを願っています。

アキム

+0

いくつかのデータの一例をせずに知ることは困難です。詳細がなければ、緯度と経度をビニングして、領域ごとに計算された多様性を持つ2次元行列を作ると考えることができます。それでは、ヒートマップをプロットするだけです。 – Osdorp

+0

あなたの早い回答に感謝します。自分の投稿を編集して自分のデータを追加しました。それが存在すれば、私はより速いアイデアを探していました。しかし、私が答えを得なければ、私はそれをします。 – akim

答えて

0

おそらくない最もエレガントな方法は、それがヒートマップになります。私は対称のブレークを使用しましたが、個別に(またビン幅も)調整することができます。代わりにヒートマップ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

+0

ありがとう、私はあなたのコードをテンプレートとして使用します。私はその多くのラインではうまくできなかった。 – akim

関連する問題