午前
・原稿書き
・会議
午後
・修論手伝い(野外調査)
・原稿書き
2日続けての砂丘調査。
激暑な梅雨を終えると同時に、梅雨みたいな初夏が終わり、とうとう本格的な夏到来。
砂丘は直射日光の直撃を受けるが、風があるせいか大学の駐車場よりも過ごしやすい、、、気持ちの問題か?
2022年7月27日水曜日
ggtreeでNEXUSファイルの系統樹を描く
午前
・データ整理
・統計ゼミ
午後
・データ整理
ggtreeでNEXUSファイル(.nex)の系統樹を描くのにどハマりした。
そもそもの発端は、RAxMLで作成した系統樹を「ggtree」の「reroot()」を使うと、こんな感じでいまいちだったことに始まる。 「reroot()」のコマンドはこんな感じ。
で、ここからどハマりした。
まず、FigTree.appでrerootをすると、「.nwk」だとboot strap値が保存できなくなる(?)ので「.nex」で保存しなければならない。
「.nex」で保存したので、「read.nexus()」を使えば良いだろうと思ったのだが、boot strap値が読み込めない(ファイルにはboot strap値はあることを確認)。
ここまでで半日以上を潰した。
試行錯誤の末、「read.beast()」を使えば良いことが判明!
普段、BEASTで作成したファイルを「read.beast()」で使っているので、これで終わった、、、と思ったら、別の意味で終わった。
悪戦苦闘の結果、原因が判明した。
まず、「read.beast()」で読み込んだ場合、下記のようにOTUは「tip.label」、 boot strap値は「label」として保存される。
ということで、「label.x」を「label」に入れることで解決できた。
・データ整理
・統計ゼミ
午後
・データ整理
ggtreeでNEXUSファイル(.nex)の系統樹を描くのにどハマりした。
そもそもの発端は、RAxMLで作成した系統樹を「ggtree」の「reroot()」を使うと、こんな感じでいまいちだったことに始まる。 「reroot()」のコマンドはこんな感じ。
#系統樹はML_tree.treeとして保管されている(nwk形式) tree <- read.tree("ML_tree.tree") tree_reroot <- root(tree, outgroup = "26") #外群のOTU名が26 str(tree_reroot) ggtree(tree_reroot) + geom_tiplab()一応、「geom_rootedge()」も試したが改善できず。
ggtree(tree_reroot) + geom_tiplab() + geom_rootedge(3)ということで、Rでrerootをすることを諦めた。そこで、FigTree.appでrerootしてからRで作図する作戦に変更。
で、ここからどハマりした。
まず、FigTree.appでrerootをすると、「.nwk」だとboot strap値が保存できなくなる(?)ので「.nex」で保存しなければならない。
「.nex」で保存したので、「read.nexus()」を使えば良いだろうと思ったのだが、boot strap値が読み込めない(ファイルにはboot strap値はあることを確認)。
ここまでで半日以上を潰した。
試行錯誤の末、「read.beast()」を使えば良いことが判明!
普段、BEASTで作成したファイルを「read.beast()」で使っているので、これで終わった、、、と思ったら、別の意味で終わった。
#系統樹はML_tree_reroot_nex.nexとして保管されている ML_TREE <- read.beast("ML_tree_reroot_nex.nex") ggtree(ML_TREE) + geom_tiplab()これで作図できるはずなのだが、エラーがでる。「ggtree(ML_TREE)」だけだと実行できるので、OTUを描画する「geom_tiplab()」でエラーが出ているらしい。
悪戦苦闘の結果、原因が判明した。
まず、「read.beast()」で読み込んだ場合、下記のようにOTUは「tip.label」、 boot strap値は「label」として保存される。
#系統樹はML_tree_reroot_nex.nexとして保管されている ML_TREE <- read.beast("ML_tree_reroot_nex.nex") ML_TREE@phylo$tip.label #OTU [1] "25" "24" "18" "16" "15" "13" ML_TREE@data$label #boot strap値 label1 label2 label3 label4 label5 58 55 42 4 49しかし、なぜか、「ggtree()」を経由すると、OTUは「label.x」、boot strap値は「label.y」になっていることが分かった!
ML_TREE <- read.beast("ML_tree_reroot_nex.nex") ML_TREE_ggtree <- ggtree(ML_TREE) ML_TREE_ggtree$dataどうやら、「geom_tiplab()」は、データ「label」を探しているが見つからないのでエラーが出ているようだ。
ということで、「label.x」を「label」に入れることで解決できた。
ML_TREE <- read.beast("ML_tree_reroot_nex.nex") ML_TREE_ggtree <- ggtree(ML_TREE) ML_TREE_ggtree_data <- ML_TREE_ggtree$data ML_TREE_ggtree_data$label <- ML_TREE_ggtree_data$label.x ggtree(ML_TREE_ggtree_data) + geom_tiplab()「.nex」を「read.beast()」で読むと発生する問題なのか、FigTree.appでrerootしたファイルだからなのか詳細な原因は良く分からないが、BEASTで作成したファイルではこのような問題は起こったことはない。 boot strap値についても同じような対応が必要な気がするが、私はboot strap値を一度取り出して別の変数に入れているので、こちらについては大きな問題となっていない。
2022年7月26日火曜日
2022年7月22日金曜日
2022年7月20日水曜日
2022年7月19日火曜日
2022年7月15日金曜日
対談
午前
・野外調査
午後
・野外調査
・標本整理
昨日、行く予定だった毎週実施する野外調査を午前に行ったのち、午後から月1で行う野外調査を実施。
大学に戻ったら雨が降り出した。ギリギリセーフ。
青山剛昌と尾田栄一郎の対談があるそうだ。これは読みたい。その名も「真実はいつもひとつなぎの大秘宝」。
・野外調査
午後
・野外調査
・標本整理
昨日、行く予定だった毎週実施する野外調査を午前に行ったのち、午後から月1で行う野外調査を実施。
大学に戻ったら雨が降り出した。ギリギリセーフ。
青山剛昌と尾田栄一郎の対談があるそうだ。これは読みたい。その名も「真実はいつもひとつなぎの大秘宝」。
2022年7月14日木曜日
2022年7月13日水曜日
メッシュ
午前
・授業準備
午後
・研究相談
・授業準備
・データ整理
砂丘の分布情報の定量化に悩む。
砂丘中を歩き回って、動物を確認したらプロットを打っている。
これを経年で調べることで、変化をモニタリングするつもりだったのが、実際にやろうと思ったら結構難しいことが分かった。
個体群密度の低い動物であれば、確認した個体全てを記録することはできるが、高密度の動物(アリなど)では、到底やっていられないので、複数個体で1個のみプロットを打つ。そのため、「プロット数≠個体数」となり、個体数(プロット数)で比較することができない。
ということで、分布面積で評価する方法を検討する。
一番簡単なのは、全ての点が含まれるような輪郭を描くことだが、砂丘の動物の多くは林縁にも分布するため、結局、砂丘全域が覆われてしまい意味がない。
そこで、次に考えたのが、メッシュ(グリッド)を作成して、プロットが含まれるメッシュの数を数える方法。
メッシュは、Rで「sf::st_make_grid()」を使うことで作成できるが、砂丘の形に合わせたメッシュを作成するため、QGISで作成した。
メッシュに含まれるポイントは、「sf::st_intersects()」で調べることができる。例えば、50mメッシュを用いて、確認された地点のみをオレンジにしたのが下図。 メッシュサイズを100mにした場合がこれ。 この方法だと、記録されたメッシュの数で分布域の経年が評価ができる、、、気がする。しかし、メッシュサイズをどのぐらいにすれば良いのか、など、検討すべきことは、まだ、色々とある。
・授業準備
午後
・研究相談
・授業準備
・データ整理
砂丘の分布情報の定量化に悩む。
砂丘中を歩き回って、動物を確認したらプロットを打っている。
これを経年で調べることで、変化をモニタリングするつもりだったのが、実際にやろうと思ったら結構難しいことが分かった。
個体群密度の低い動物であれば、確認した個体全てを記録することはできるが、高密度の動物(アリなど)では、到底やっていられないので、複数個体で1個のみプロットを打つ。そのため、「プロット数≠個体数」となり、個体数(プロット数)で比較することができない。
ということで、分布面積で評価する方法を検討する。
一番簡単なのは、全ての点が含まれるような輪郭を描くことだが、砂丘の動物の多くは林縁にも分布するため、結局、砂丘全域が覆われてしまい意味がない。
そこで、次に考えたのが、メッシュ(グリッド)を作成して、プロットが含まれるメッシュの数を数える方法。
メッシュは、Rで「sf::st_make_grid()」を使うことで作成できるが、砂丘の形に合わせたメッシュを作成するため、QGISで作成した。
メッシュに含まれるポイントは、「sf::st_intersects()」で調べることができる。例えば、50mメッシュを用いて、確認された地点のみをオレンジにしたのが下図。 メッシュサイズを100mにした場合がこれ。 この方法だと、記録されたメッシュの数で分布域の経年が評価ができる、、、気がする。しかし、メッシュサイズをどのぐらいにすれば良いのか、など、検討すべきことは、まだ、色々とある。
2022年7月12日火曜日
2022年7月11日月曜日
2022年7月8日金曜日
オルソ画像(GeoTif)にプロットを打ちたい
午前
・データ解析
午後
・個人ゼミ×2
・卒論手伝い(学生ピックアップ)
・データ解析
1年ほど前から悩み、ここ数日、本格的に取り組み、挫折した問題。
鳥取砂丘のオルソ画像(GeoTif)にプロットを打ちたいのだが、航空写真が砂地部分を含むように撮影しているため、左上の海の部分が欠けている。
このままだとカッコ悪いので、海岸線が水平になるように時計周りに回転させて、海の部分を削除した図を作成したい。
そこで、案1として、GeoTifを回転させることを試みた。
GeoTifを任意の角度回すことはできないのか、私の技術がないのか、分からないが結果的に案1は失敗に終わった。
とりあえず、QGISのプラグイン「Freehand Raster Georeferencer」を使うと、GeoTifを任意に回転させることができる。一応、地理情報も付加して保存ができるので、本日の昼ごろ、これでイケる!と確信を得た。
個人ゼミを経て、早速、プロットを打ってみると、実際の地点からズレることが判明(プロットは基本的に砂地に配置される)。
ここに達するまでに数日かかっていたので、一気に諦めモードになった。
ということで、カッコ悪い気がするが、案2で進めることにした。
案2は、空白のあるGeoTifデータにプロットをうち画像ファイル(.png)として保存したのち、画像ファイルを回転させ、トリミングする、というもの。
そこで、これを時計回りに15度回転させて、砂地を中心に必要なところだけを残すようにトリミングをする。
Rには、画像処理をするパッケージが色々とある(みたい)。今回は、「magick」を使った。
画像ファイルをトリミングするという流れは悔しいが、Rのみで完結できたので納得することにした。
参照
・magick パッケージの紹介
・Rで解析:画像操作の進化「magick」パッケージ
・データ解析
午後
・個人ゼミ×2
・卒論手伝い(学生ピックアップ)
・データ解析
1年ほど前から悩み、ここ数日、本格的に取り組み、挫折した問題。
鳥取砂丘のオルソ画像(GeoTif)にプロットを打ちたいのだが、航空写真が砂地部分を含むように撮影しているため、左上の海の部分が欠けている。
このままだとカッコ悪いので、海岸線が水平になるように時計周りに回転させて、海の部分を削除した図を作成したい。
そこで、案1として、GeoTifを回転させることを試みた。
GeoTifを任意の角度回すことはできないのか、私の技術がないのか、分からないが結果的に案1は失敗に終わった。
とりあえず、QGISのプラグイン「Freehand Raster Georeferencer」を使うと、GeoTifを任意に回転させることができる。一応、地理情報も付加して保存ができるので、本日の昼ごろ、これでイケる!と確信を得た。
個人ゼミを経て、早速、プロットを打ってみると、実際の地点からズレることが判明(プロットは基本的に砂地に配置される)。
ここに達するまでに数日かかっていたので、一気に諦めモードになった。
ということで、カッコ悪い気がするが、案2で進めることにした。
案2は、空白のあるGeoTifデータにプロットをうち画像ファイル(.png)として保存したのち、画像ファイルを回転させ、トリミングする、というもの。
library(raster) library(ggplot2) library(RStoolbox) #ラスタデータ(GioTif)の読み込み r <- stack("TottoriSundDune_scale1-4_rotate0.tif") #プロットデータの読み込み data <- read.csv("distribution.csv") #作図 ggRGB(r, r = 1, g = 2, b = 3) + geom_point(data=data, aes(x=lon, y=lat), size=15, pch=21, fill="red")すると、プロット位置は正しいのだが、空白(黒)があるカッコ悪い図ができる。
そこで、これを時計回りに15度回転させて、砂地を中心に必要なところだけを残すようにトリミングをする。
Rには、画像処理をするパッケージが色々とある(みたい)。今回は、「magick」を使った。
#上記の図をmap.pngとして保存しておく library(magick) #画像ファイルの読み込み map <- image_read('map.png', density=300) #画像の回転;時計周りに15度回転 rotate <- image_rotate(map, 15) #画像のトリミング;「1500x800」=「幅x高さ」;「+400」x軸の開始位置; 「+1000」y軸の開始位置;軸の開始位置は「-」も使えるらしい(基準が良く分からない) photo <- image_crop(rotate, geometry = "1500x800+400+1000") #描画;普通の画像データとして扱える plot(photo)こんな感じで、余計な空白(黒)が無くなった。
画像ファイルをトリミングするという流れは悔しいが、Rのみで完結できたので納得することにした。
参照
・magick パッケージの紹介
・Rで解析:画像操作の進化「magick」パッケージ
2022年7月6日水曜日
2022年7月5日火曜日
どちらが沢山採れるのか
午前
・論文書き
午後
・生態学ゼミ
・授業準備
・面談
・授業準備
久しぶりに論文を投稿。前回ほどの自信はない。
結果はまあまあだと思うが、解析が少し弱めか。
今月中にあと1本(和文)投稿してしまいたいが、学生が主体の論文なので、気長に対応をしていく。
先週、学生が設置した市販と自作のトラップ。どちらが沢山採れるのか実験。
・論文書き
午後
・生態学ゼミ
・授業準備
・面談
・授業準備
久しぶりに論文を投稿。前回ほどの自信はない。
結果はまあまあだと思うが、解析が少し弱めか。
今月中にあと1本(和文)投稿してしまいたいが、学生が主体の論文なので、気長に対応をしていく。
先週、学生が設置した市販と自作のトラップ。どちらが沢山採れるのか実験。
2022年7月4日月曜日
2022年7月1日金曜日
北海道、新潟、広島からハナダカダンゴムシ
午前
・データ整理
午後
・卒論手伝い(野外調査)
・授業準備
・授業
・論文書き
1日中、腹の調子が悪かった。夏バテか。
前期、最後の授業が終わった!
岩手県に続き、北海道、新潟、広島からハナダカダンゴムシを初報告しました。
唐沢重考, 鈴木武, 南葉錬志郎 (2022)
北海道,新潟県,広島県における外来種ハナダカダンゴムシ (ワラジムシ亜目,オカダンゴムシ科) の初記録.
昆蟲 (ニューシリーズ), 25: 74–75.
ここから入手できます。
・データ整理
午後
・卒論手伝い(野外調査)
・授業準備
・授業
・論文書き
1日中、腹の調子が悪かった。夏バテか。
前期、最後の授業が終わった!
岩手県に続き、北海道、新潟、広島からハナダカダンゴムシを初報告しました。
唐沢重考, 鈴木武, 南葉錬志郎 (2022)
北海道,新潟県,広島県における外来種ハナダカダンゴムシ (ワラジムシ亜目,オカダンゴムシ科) の初記録.
昆蟲 (ニューシリーズ), 25: 74–75.
ここから入手できます。
登録:
投稿 (Atom)