levelplot (rasterVis library)のTips

色の変更
→library(RColorBrewer)を使って
  col.regions=colorRampPalette(brewer.pal(9, "RdBu"))などを追加
colorRampPaletteをつけないと変な挙動になることあり(なんで??)

デフォルトであるLongtitude, Latitudeの表示を消す
→ xlab="", ylab="" を追加

どこの値で色を変えるかの変更(例 0~1まで10個、0.1刻み)
→ at=seq(0, 1,0.1) を追加
名前の変更
→names.attr=c("A","B",などなど) を追加

Coordinatesの表示を消す
→scales=list(draw=FALSE) を追加

標高図(なんていうの?)のようなやつを消す
→margin=FALSEを追加

凡例を消す
→colorkey=FALSEを追加

凡例の位置を下にうつす
→colorkey=list(space="bottom")を追加
凡例のフォントサイズの変更
→colorkey=list(space="bottom",labels=list(cex = 1.5))とする

凡例を連続値でなくカテゴリーとして文字で表現する
例えばcolorkey=list(at=c(0,1,2,3), labels=list(at=c(0.5,1.5,2.5), labels=c("A","B","C"))とする

ベクターデータを重ねる
→levelplot() のあとに + layer(sp.polygons(bnd.shp)) を追加


ベクターデータの色を変更

  1. layer(sp.polygons(bnd.shp, col="grey")) とする


各図のタイトル(name.attr)のフォントサイズの変更
→ par.strip.text=list(cex=2) とする



levelplot(rasStack, at=seq(0, 1,0.1),margin=FALSE, col.regions=colorRampPalette(brewer.pal(9, "RdBu")),names.attr=name,scales=list(draw=FALSE)) + layer(sp.polygons(bnd.shp))

複数の図を同時に描写
p1=levelplot(・・・)
p2=levelplot(・・・)
print(p1, split=c(1, 1, 2, 2), more=TRUE)
print(p2, split=c(2, 1, 2, 2))

split=c(表示したい列番号、表示したい行番号、スクリーンの分割列数、スクリーンの分割行数)

参考:
http://stackoverflow.com/questions/22021889/multiple-rastervis-levelplots
http://stackoverflow.com/questions/22021889/multiple-rastervis-levelplots

時系列ラスターデータの読み込み(R)

以前過去記事(時系列ラスターデータの処理について)ではでndvitsを用いたけどもかなり古いし、ライブラリがアーカイブされてしまったので、新たな取組を。


1.複数枚のtifファイルを複数バンドのもつ一つのtifにしてstackとして読み込む。
過去記事(大量のラスターデータを一枚のtifにまとめる)参照
ただし、GRASSGISを使ってます。

2.複数枚のtifファイルをそのままRでstack化する。
setwd("~/GIMMS/TIF/")
ls=grep(".tif",dir("~/GIMMS/TIF/"),value=T)
rasStack=stack(ls)
ただし、ls変数内のファイルの順序に注意。




簡単!!

Rにおけるraster*オブジェクトの違い


Raster
1バンドのみで構成されるメッシュデータ
r=raster("パス/◯◯.tif")


Raster stack
複数バンドで構成されるメッシュデータ。brickと違い、データがすべてメモリ上に格納されるわけではないので、大規模データはstackを利用するほうがパンクしない。
s1=stack("パス/◯◯.tif")
or
s2=stack(r1,r2) #r1,r2はrasterオブジェクト

Raster brick
複数バンドで構成されるメッシュデータ。stackと違い、データはすべてメモリ上に格納されるため計算が早い。
b1=brick("パス/◯◯.tif")
b2=brick(r1,r2) #r1,r2はrasterオブジェクト
b3=brick(s)

brickはデータがメモリ上にあるため、brick内データ演算ができる。
library(raster)
#b1というbrickオブジェクトを作成
b1=brick("パス/◯◯.tif")

#b1@data@valuesはb1の値。matrix。nはb1の値からNAを取り除いたもの。integer
n <- which(! is.na(b1@data@values))

#例としてkmeansを実行。b1@data@values[n]でNAを取り除いたデータを用いている。
clus=kmeans(b1@data@values[n],3)
ans=b1

#結果をbrickに返す。
ans@data@values[n]=clus$cluster
spplot(ans)

連続色の作り方

ここを参照
https://oku.edu.mie-u.ac.jp/~okumura/stat/colors.html


#色を指定
#YnGnBlの連続色をかく。Hex codeをチェック
brewer.pal(9, "YnGnBl")

#色の定義
cols = colorRamp(c("#FFFFD9", "#EDF8B1", "#C7E9B4", "#7FCDBB", "#41B6C4", "#1D91C0", "#225EA8", "#253494", "#081D58"))
#空のプロット
plot(NULL, xlim=c(0,100), ylim=c(0,1), axes=FALSE, xlab="", ylab="")
#色を加える
rect(0:99, 0, 1:100, 1, col=rgb(cols(0:99/99)/255), border=NA)

大量のラスターデータ処理[r.series] [一枚のtifにまとめる]など

今までやってこなかったので。
GRASSのi.groupで簡単に。

i.group group=NAME in=image1,image2,image3,..

image1,image2,image3,..のところはg.mlistで片付ける。
g.mlist pattern="AAA*" exclude="AAA1" separator=,


一枚のラスタ‐に大量のバンドが入ってる。
これをエクスポートして他のアプリで使う。


http://grass.osgeo.org/grass64/manuals/r.out.gdal.html
http://grass.osgeo.org/grass64/manuals/i.group.html


r.seriesコマンドの際も同様だが、
ファイル数に注意(ulimit -nで確認)
大量のデータ処理の際は拒否られる。
これを防ぐには、macだと↓で対応。
http://unix.stackexchange.com/questions/108174/how-to-persist-ulimit-settings-in-osx-mavericks
http://docs.basho.com/riak/latest/ops/tuning/open-files-limit/#Mac-OS-X

PolygonのDissolve問題

QGISでDissolveをするとテーブル内がわけわからないことになる。
(ランダムに行が選択されている?)
GRASSでやるとテーブル内が消える。
ArcGISでやると和をとるか平均をとるかなど選択できる。が、選択が異様に面倒くさい。