2013-02-02 1 views
39

私はpar(mfrow=c(2,2))と一緒に4つのプロットをまとめました。上記の2つのプロットの共通のタイトルと、2つの左パネルと右のプロットの中央にある2つのパネルの共通のタイトルを描きたいと思います。par(mfrow)でコンパイルされたFigureパネルの共通メインタイトル

これは可能ですか?

+0

?なぜあなたはすべてのプロットの上にそれを望んでいないのですか? – A5C1D2H2I1M1N2O1R2T1

+0

私が意味していたのは、2つの上のプロットのタイトルと下の2つのプロットのタイトルです。私は自分のQを修正した – ECII

答えて

34

この仕事をする必要がありますが、あなたはそれだけで権利を取得するためにline引数で遊んでする必要があります: "余白テキスト" の略でmtext

par(mfrow = c(2, 2)) 
plot(iris$Petal.Length, iris$Petal.Width) 
plot(iris$Sepal.Length, iris$Petal.Width) 
plot(iris$Sepal.Width, iris$Petal.Width) 
plot(iris$Sepal.Length, iris$Petal.Width) 
mtext("My 'Title' in a strange place", side = 3, line = -21, outer = TRUE) 

enter image description here

side = 3は「上」のマージンに配置するように指示します。 line = -21は、配置を21行分オフセットすると言います。 outer = TRUEは、外側のマージン領域を使用しても問題ないと言います。上部に別の「タイトル」を追加するには、あなたはあなたが機能layout()を使用して、両方の列に発生した2つのプロット領域を設定することができ、たとえば、mtext("My 'Title' in a strange place", side = 3, line = -2, outer = TRUE)

+1

素晴らしい。ありがとうございました。私は 'mtext'が負の値を使うことができるのか分からなかった。 – ECII

+0

+1「奇妙な場所の私のタイトル」... – ECII

+2

@ECII、問題ありません。しかし、一般的には、@ Didzisの答えで示されているように、あなたはこれを 'layout'を使ってアプローチすると思います。 – A5C1D2H2I1M1N2O1R2T1

31

を使用して追加することができます

(繰り返し番号1を参照し、 3のmatrix())。次に、タイトルを設定するのにplot.new()text()を使用しました。あなたはマージンと高さで遊んでより良い表現を得ることができます。

x<-1:10 
par(mar=c(2.5,2.5,1,1)) 
layout(matrix(c(1,2,3,4,1,5,3,6),ncol=2),heights=c(1,3,1,3)) 
plot.new() 
text(0.5,0.5,"First title",cex=2,font=2) 
plot(x) 
plot.new() 
text(0.5,0.5,"Second title",cex=2,font=2) 
hist(x) 
boxplot(x) 
barplot(x) 

enter image description here

+5

ここに私の投票があります。私は 'レイアウト'は確かに行く方法だと思うが、 'mtext'オプションも表示したかった。 – A5C1D2H2I1M1N2O1R2T1

10

同じですが、太字で上記と同じ引数でtitle(...)を使用して行うことができます。

title("My 'Title' in a strange place", side = 3, line = -21, outer = TRUE) 
6

ここthis postからline2user機能を使用して、それを行うための別の方法です。ここ

par(mfrow = c(2, 2)) 
plot(runif(100)) 
plot(runif(100)) 
text(line2user(line=mean(par('mar')[c(2, 4)]), side=2), 
    line2user(line=2, side=3), 'First title', xpd=NA, cex=2, font=2) 

plot(runif(100)) 
plot(runif(100)) 
text(line2user(line=mean(par('mar')[c(2, 4)]), side=2), 
    line2user(line=2, side=3), 'Second title', xpd=NA, cex=2, font=2) 

centered_titles

、タイトルはline2user(2, 3)によって示されるように、プロットの上端よりも2行に配置されます。左と右のマージンの合計幅の半分、つまりmean(par('mar')[c(2, 4)])によって、2番目と4番目のプロットに対してオフセットして中央に配置します。


line2userは、ユーザー座標の軸からオフセットさ(行数)を表し、次のように定義される。それは一種のそれではないだろう、「タイトル」が不明瞭になるアウトドア

line2user <- function(line, side) { 
    lh <- par('cin')[2] * par('cex') * par('lheight') 
    x_off <- diff(grconvertX(0:1, 'inches', 'user')) 
    y_off <- diff(grconvertY(0:1, 'inches', 'user')) 
    switch(side, 
     `1` = par('usr')[3] - line * y_off * lh, 
     `2` = par('usr')[1] - line * x_off * lh, 
     `3` = par('usr')[4] + line * y_off * lh, 
     `4` = par('usr')[2] + line * x_off * lh, 
     stop("side must be 1, 2, 3, or 4", call.=FALSE)) 
} 
+0

ニースone @jbaums – Skiptoniam

関連する問題