2

Rthroughcarパッケージで 3 次元散布図を作ろうとしています。MWE を以下に示します。

pdf(file = "Hyperellipsoid.pdf")
library(car)
scatter3d(
    prestige ~ income + education
  , xlab = ""
  , ylab = ""
  , zlab = ""
  , surface=FALSE
  , fill=FALSE
  , grid=TRUE
  , axis.scales=FALSE
  , ellipsoid=TRUE
  , axis.col= "white"
  , square.col= "white"
  , point.col = "white"
  , data=Duncan
  )
dev.off()

ここに画像の説明を入力

質問

  1. プロットからデータ サークルを削除するには?
  2. プロットをpdf形式で保存するには?
4

2 に答える 2

1

完全な散布図関数をハックする必要はありません(これは、を介してより簡単に確認できますcar:::scatter3d.default)。あなたはただ使うことができますcar:::ellipsoid

library("car")
dmat <- subset(Duncan,select=c(income,education,prestige))
dfn <- 3
dfd <- nrow(Duncan) - 1
level <- 0.95
ell.radius <- sqrt(dfn * qf(level, dfn, dfd))
library("rgl")
open3d()
rgl.material(color="blue")
ellips <- car:::ellipsoid(center = colMeans(dmat),
            shape = cov(dmat),
            radius = ell.radius)
wire3d(ellips)
rgl.postscript("ell3d.pdf",fmt="pdf")

ここに画像の説明を入力してください

于 2013-03-16T15:30:47.813 に答える
1

カラーポイントを変更しても効果がないようです。解決策は、関数をハックすることです。いくつかの R 関数をハックしたいときに、一般的にどのように行うかを以下に示します。したがって、これは、カスタム使用する関数 4 をハックする方法に関する一般的な回答です。

  1. capture.output(getS3method('scatter3d','default'),file='my.scatter3d.R'). これにより、関数を含む新しいファイルが作成されます。
  2. 次に、ファイルを開き、最後の 2 行を削除します。関数に名前を付けます。例えば:my.scatter3d
  3. を呼び出す回線を変更しますrgl.points
  4. 最後に、次のように関数を呼び出します。

     source('my.scatter3d.R')
     scatter3d(
            z= Duncan$prestige 
            x= Duncan$income ,
            y = Duncan$education,
            ....
    

散布式関数を呼び出したくない場合は、ハックする必要があります...

  `capture.output(getS3method('scatter3d','formula'),file='my.scatter3dformlua.R')` 

そして行を変更します

  scatter3d(X[, 2], X[, 1], X[, 3], xlab = xlab, ylab = ylab, 
            zlab = zlab, labels = labels, radius = radius, ...)

  my.scatter3d(X[, 2], X[, 1], X[, 3], xlab = xlab, ylab = ylab, 
            zlab = zlab, labels = labels, radius = radius, ...)

PS

関数が関数を見つけられないと文句を言う場合、通常、パッケージ名を anemspace として追加します。次に例を示します。

 rgl:::FUNCTION_
于 2013-03-16T13:03:15.797 に答える