3

次のグラフのラベルを正しくプロットするのに問題があります。

scatterhist = function(x, y, xlab="", ylab=""){
  zones=matrix(c(2,0,1,3), ncol=2, byrow=TRUE)
  layout(zones, widths=c(4/5,1/5), heights=c(1/5,4/5))
  xhist = hist(x, plot=F, breaks=10)
  yhist = hist(y, plot=F, breaks=10)
  top = max(c(xhist$counts, yhist$counts))

  par(mar=c(3,3,1,1))
  plot(x, y)

  par(mar=c(0,3,1,1))
  barplot(xhist$counts, axes=FALSE, ylim=c(0, top), space=0)

  par(mar=c(3,0,1,1))
  barplot(yhist$counts, axes=FALSE, xlim=c(0, top), space=0, horiz=TRUE)

  par(oma=c(3,3,0,0))
  mtext(xlab, side=1, line=1, outer=TRUE, adj=0, 
    at=.8 * (mean(x)-min(x))/(max(x)-min(x)))
  mtext(ylab, side=2, line=1, outer=TRUE, adj=0, 
    at=.8 * (mean(y)-min(y))/(max(y)-min(y)))
}

私がタイプするとき:

scatterhist(x[,6], x[,7], xlab="Cost of Taxi", ylab="Cost of Fuel")

ラベルは軸の値と重なります。ただし、次のように入力すると、次のようになります。

scatterhist(x[,6], x[,7], xlab="Cost of Taxi", ylab="Cost of Fuel")
scatterhist(x[,6], x[,7], xlab="Cost of Taxi", ylab="Cost of Fuel")

2番目のグラフは正しく表示されます...誰かがこの問題を手伝ってくれますか?また、最初のプロットの前にグラフウィンドウを開こうとしましたwindows()が、これは機能しません...

ありがとう!ステファノ

4

1 に答える 1

2

par(oma=c(3,3,0,0))線はデバイス領域全体に適用されるため、最初の呼び出しの前に来るpar(mar=...)必要があります(つまり、すでにいくつかのグラフをプロットしている場合、外側のマージンのサイズを変更することはできません)。

scatterhist = function(x, y, xlab="", ylab=""){
    zones=matrix(c(2,0,1,3), ncol=2, byrow=TRUE)
    layout(zones, widths=c(4/5,1/5), heights=c(1/5,4/5))
    par(oma=c(3,3,0,0))

    xhist = hist(x, plot=F, breaks=10)
    yhist = hist(y, plot=F, breaks=10)
    top = max(c(xhist$counts, yhist$counts))

    par(mar=c(3,3,1,1))
    plot(x, y)

    par(mar=c(0,3,1,1))
    barplot(xhist$counts, axes=FALSE, ylim=c(0, top), space=0)

    par(mar=c(3,0,1,1))
    barplot(yhist$counts, axes=FALSE, xlim=c(0, top), space=0, horiz=TRUE)

    mtext(xlab, side=1, line=1, outer=TRUE, adj=0, 
        at=.8 * (mean(x)-min(x))/(max(x)-min(x)))
    mtext(ylab, side=2, line=1, outer=TRUE, adj=0, 
        at=.8 * (mean(y)-min(y))/(max(y)-min(y)))
    }
于 2012-09-11T11:57:48.253 に答える