この資料では,GNSS 観測点の変位時系列データを読み込み,
ここでは,
library(this.path)
setwd(this.dir())
library(lubridate)
library(ggplot2)
ここでは,GNSS データファイル 950296-rx.dat
を読み込みます。
その後,日付を ymd() で Date
型に変換し,データフレームにまとめます。
nel=read.table("./950296-rx.dat", header=T)
#1列目が日付, 2列目が東-西[m], 3列目が北-南[m], 4列目が上-下[m]
da=ymd(nel[,1])
#年月日
edat=data.frame(da, nel[,2], nel[,3], nel[,4])
東西・南北・上下の 3 成分を,同一の図に重ねてプロットします。
不透明度(alpha)を小さくすることで,長期時系列の分布を可視化しています。
p2 = ggplot()
p2 = p2 + geom_point(data=edat, aes(x=edat[,1],y=edat[,2]), col="blue", alpha = 0.1, size=0.1) #alphaが不透明度
p2 = p2 + geom_point(data=edat, aes(x=edat[,1],y=edat[,3]), col="red", alpha = 0.1, size=0.1)
p2 = p2 + geom_point(data=edat, aes(x=edat[,1],y=edat[,4]), col="black", alpha = 0.1, size=0.1)
p2 = p2 + ylab("Relative displacement [m]") + xlab("Time [year]")
p2 = p2 + scale_y_continuous(breaks=seq(-0.16,0.16,0.04))
p2 = p2 + coord_cartesian(ylim=c(-0.16,0.16))
p2 = p2 + scale_x_date(breaks="3 year", date_labels = "%Y")
p2
2011年3月11日の位置に縦線を引き,
さらに東西・南北・上下成分の凡例を手動で描き込みます。
白背景・枠線つきの体裁を設定します。
p2 = p2 + geom_vline(xintercept =ymd("2011-03-11"), linewidth=0.5, linetype=3, colour="black")
##凡例を手動プロット
h1=data.frame(ymd(19960701), 0.15)
h2=data.frame(ymd(19960701), 0.13)
h3=data.frame(ymd(19960701), 0.11)
p2 = p2 + geom_point( data=h1, aes(x=h1[,1], y=h1[,2]), col="blue", size=0.5)
p2 = p2 + geom_point( data=h2, aes(x=h2[,1], y=h2[,2]), col="red", size=0.5)
p2 = p2 + geom_point( data=h3, aes(x=h3[,1], y=h3[,2]), col="black", size=0.5)
p2 = p2 + annotate("text", x=ymd(19970701), y=0.15, label="East-West", size=3, hjust=0)
p2 = p2 + annotate("text", x=ymd(19970701), y=0.13, label="North-South", size=3, hjust=0)
p2 = p2 + annotate("text", x=ymd(19970701), y=0.11, label="Up-Down", size=3, hjust=0)
p2 = p2 + theme( panel.background = element_rect(fill="white", colour = "black", linetype = "solid"),
panel.grid = element_blank()) #白地の普通のグラフを書く体裁
p2
その後 PNG ファイルとして保存します。
図のサイズや解像度を自由に指定できます。
ggsave(p2,filename="gnss.png",width=4,height=3,dpi=400)
地震後(2011-03-11 以降)の東西成分に対して,
対数関数
\[ x(t) = a\log(t-t_0)+b \]
を仮定してフィッティングを行います。
観測データに対して,対数フィット曲線を重ねて描画します。
#関数fitting
library(minpack.lm)
after=subset(edat, edat[,1]> ymd(20110311))
xa=after[,1]; ya=after[,2]
logfit=nlsLM( ya ~ a*log(as.numeric(xa-ymd(20110311)))+b, start = c(a=1,b=1)) # start= は推定の初期値
a2=summary(logfit)$parameters[[1]]
b2=summary(logfit)$parameters[[2]]
result=data.frame(xa, a2*log(as.numeric(xa-ymd(20110311)))+b2)
p2 = p2 + geom_line( data=result, aes(x=result[,1], y=result[,2]), col="green", size=0.5)
p2
最終図を PNG として保存します。
ggsave(p2,filename="gnss_logfit.png",width=4,height=3,dpi=400)