2

虹彩データについては、以下のようにpairs()関数を使用して散布図を取得します。

pairs(iris[1:4], 
      main = "Edgar Anderson's Iris Data", 
      lower.panel=panel.pearson, 
      pch = 21, 
      bg = c("red", "green3", "blue")[unclass(iris$Species)])

関数 panel.pearson を次のように定義します。

panel.pearson <- function(x, y, ...) { horizontal <- (par("usr")[1] + par("usr")[2]) / 2; vertical <- (par("usr")[3] + par("usr")[4]) / 2; text(horizontal, vertical, format(abs(cor(x,y)), digits=2)) }

下のパネルを相関行列に変換し、対角線からラベルを削除して、右と下の軸に沿って配置する必要がありました。私は次のことを試しました:

pairs(iris[1:4], 
      main = "Edgar Anderson's Iris Data", 
      labels=NULL, 
      lower.panel=panel.pearson, 
      xaxt='n', 
      yaxt='n', 
      pch = 21, 
      bg = c("red", "green3", "blue")[unclass(iris$Species)])

これにより、必要なものが得られます。下軸と右軸のラベルを取得する方法がわかりません(変数ラベル、つまり、Sepal.Length、Sepal.Widthなど)。どんな助けでも大歓迎です。ありがとう!

4

1 に答える 1

1

これはあなたが考えていたことですか?

# Horizontal axis
text(seq(.2, 2, length.out=4), 0,
     c("Sepal Length","Sepal Width","Petal Length","Petal Width"),
     xpd=TRUE, adj=c(0,.5), cex=.9)

# Vertical axis
text(0, seq(0.35, 2.05, length.out=4),
     rev(c("Sepal Length","Sepal Width","Petal Length","Petal Width")),
     xpd=TRUE, adj=c(0.5, 0), 
     srt=90,  # rotates text to be parallel to axis
     cex=.9)

試行錯誤しながらラベルを配置しました。おそらくもっと良い方法がありますが、少なくともこれにより、(ほぼ) 適切な場所にラベルが表示されます。

更新:新しいSOの質問により、軸ラベルを配置するための少し良い方法についてのアイデアが得られました。リンクされた回答が指摘しているように、プロット エリアの現在の座標は で取得できますpar('usr')。したがって、これに基づいてコードを更新します。

x.coords = par('usr')[1:2]
y.coords = par('usr')[3:4]

# Offset is estimated distance between edge of plot area and beginning of actual plot
x.offset = 0.03 * (x.coords[2] - x.coords[1])  
xrng =  (x.coords[2] - x.coords[1]) - 2*x.offset
x.width = xrng/4  

y.offset = 0.028 * (y.coords[2] - y.coords[1])
yrng =  (y.coords[2] - y.coords[1]) - 2*y.offset
y.width = yrng/4  

# seq function below calculates the location of the midpoint of each panel

# x-axis labels
text(seq(x.coords[1] + x.offset + 0.5*x.width, x.coords[2] - x.offset - 0.5*x.width,
         length.out=4), 0,
     c("Sepal Length","Sepal Width","Petal Length","Petal Width"),
     xpd=TRUE,adj=c(.5,.5), cex=.9)

# y-axis labels
text(0, seq(y.coords[1] + y.offset + 0.5*y.width, y.coords[2] - 3*y.offset - 0.5*y.width, 
     length.out=4),
     rev(c("Sepal Length","Sepal Width","Petal Length","Petal Width")),
     xpd=TRUE, adj=c(0.5, 0.5), 
     srt=90,  # rotates text to be parallel to axis
     cex=.9)

オフセットのサイズは試行錯誤によって決定されるため、まだ理想的ではありません。Rがプロット領域の境界と実際のプロットの開始位置との間のオフセットのサイズを決定する方法を誰かが知っている場合、オフセットはプログラムでも決定できます。

于 2012-11-14T21:18:18.860 に答える