R の図形ウィンドウで base と ggplot のグラフィックを結合する
2023-09-17 11:09:29
質問
baseとggplotを組み合わせた図を作成したいのですが、どうすればよいでしょうか。次のコードは、Rのベースプロット関数を使用して私の図を示しています。
t <- c(1:(24*14))
P <- 24
A <- 10
y <- A*sin(2*pi*t/P)+20
par(mfrow=c(2,2))
plot(y,type = "l",xlab = "Time (hours)",ylab = "Amplitude",main = "Time series")
acf(y,main = "Autocorrelation",xlab = "Lag (hours)", ylab = "ACF")
spectrum(y,method = "ar",main = "Spectral density function",
xlab = "Frequency (cycles per hour)",ylab = "Spectrum")
require(biwavelet)
t1 <- cbind(t, y)
wt.t1=wt(t1)
plot(wt.t1, plot.cb=FALSE, plot.phase=FALSE,main = "Continuous wavelet transform",
ylab = "Period (hours)",xlab = "Time (hours)")
これは
これらのパネルのほとんどは、私のレポートに含めるには十分なように見えます。しかし、自己相関を示すプロットは改善される必要があります。これはggplotを使用することでより良く見えます。
require(ggplot2)
acz <- acf(y, plot=F)
acd <- data.frame(lag=acz$lag, acf=acz$acf)
ggplot(acd, aes(lag, acf)) + geom_area(fill="grey") +
geom_hline(yintercept=c(0.05, -0.05), linetype="dashed") +
theme_bw()
<イグ
しかし、ggplotはベースグラフィックではないので、ggplotとlayoutやpar(mfrow)を組み合わせることができません。ベースグラフィックから生成された自己相関プロットをggplotから生成されたものに置き換えるにはどうしたらよいでしょうか?すべての図形がggplotで作成されていればgrid.arrangeが使えることは知っていますが、1つのプロットだけがggplotで生成されている場合はどうすればいいでしょうか?
どのように解決するのですか?
gridBase パッケージを使えば、2行追加するだけでできます。グリッドを使って面白いプロットをしたいのであれば、以下のことを理解し、マスターする必要があると思います。 ビューポート . これは本当にグリッドパッケージの基本的なオブジェクトです。
vps <- baseViewports()
pushViewport(vps$figure) ## I am in the space of the autocorrelation plot
baseViewports()関数は、3つのグリッドビューポートのリストを返します。 ここでは図ビューポートを使用します の図領域に対応するビューポートです。 現在 プロットの図領域に対応するビューポートです。
最終的な解答は以下のようになります。
library(gridBase)
library(grid)
par(mfrow=c(2, 2))
plot(y,type = "l",xlab = "Time (hours)",ylab = "Amplitude",main = "Time series")
plot(wt.t1, plot.cb=FALSE, plot.phase=FALSE,main = "Continuous wavelet transform",
ylab = "Period (hours)",xlab = "Time (hours)")
spectrum(y,method = "ar",main = "Spectral density function",
xlab = "Frequency (cycles per hour)",ylab = "Spectrum")
## the last one is the current plot
plot.new() ## suggested by @Josh
vps <- baseViewports()
pushViewport(vps$figure) ## I am in the space of the autocorrelation plot
vp1 <-plotViewport(c(1.8,1,0,1)) ## create new vp with margins, you play with this values
require(ggplot2)
acz <- acf(y, plot=F)
acd <- data.frame(lag=acz$lag, acf=acz$acf)
p <- ggplot(acd, aes(lag, acf)) + geom_area(fill="grey") +
geom_hline(yintercept=c(0.05, -0.05), linetype="dashed") +
theme_bw()+labs(title= "Autocorrelation\n")+
## some setting in the title to get something near to the other plots
theme(plot.title = element_text(size = rel(1.4),face ='bold'))
print(p,vp = vp1) ## suggested by @bpatiste
関連
-
データボックス内の行/列の削除/追加を行うR言語
-
[解決済み] Rの%*%の意味 [重複]について
-
[解決済み] Rの再現性のある優れた例題の作り方
-
[解決済み] 統計的最頻値の求め方は?
-
[解決済み】2つのy軸を左右に持ち、異なるスケールを持つggplot
-
[解決済み】ベースグラフィックスでプロットエリアの外側に凡例をプロットする?
-
[解決済み】自作関数を書くときにRの省略機能を使うには?
-
[解決済み】Rスクリプトで警告をグローバルに抑制する方法
-
[解決済み] [Solved] data.frameのカラムをベクトルに変換する?
-
[解決済み] ggplot を使ってプロットするとき、hjust と vjust は何をするのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
SocketTimeoutExceptionです。読み込みがタイムアウトしました
-
R read.table Error:埋め込まれたヌルが含まれているようです。
-
DEG解析で'row.names'に重複した名前を付けられない場合の解決法
-
[解決済み] lm.fit(x,y,offset = offset, singular.ok,...) 0 非NAケースでboxcox式で計算するとエラーになる。
-
[解決済み] 特定のサイズのプロットウィンドウを作成する
-
[解決済み] グループ化関数(tapply、by、aggregate)と*applyファミリ
-
[解決済み] require()とlibrary()の違いは何ですか?
-
[解決済み] ベクトル中のある要素のインデックスを求めるR関数はありますか?
-
[解決済み】私のggplot2構文が賢明であるときに、R CMDチェック「no visible binding for global variable」注記を処理するにはどうすればよいですか?
-
[解決済み] データフレームのカラムのデータ型を決定する