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)) を追加
ベクターデータの色を変更
- 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変数内のファイルの順序に注意。
簡単!!
Raster stack内データのslope, pvalueの計算
#STACK is a raster stack
ras=STACK1
iii <- which(!is.na(ras[]))
fun <- function(x) {
summary(lm(x ~ year))$coefficients}
A=apply(STACK[iii], 1, fun)
ras[iii]=A[1,]
STACK[iii].intercept=ras
ras[iii]=A[2,]
STACK[iii].slope=ras
ras[iii]=A[8,]
STACK[iii].pval=ras
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