10

私は scatter3d を使用しており、3 つの軸には 2 つのエンドポイント値があります。通常の plot() 関数と同じように、軸全体でラベルを取得するにはどうすればよいですか?

4

2 に答える 2

28

しかたがない。私はそれを挑戦として受けました。

明らかに、次のことが必要です。

require(rgl)
require(car)
require(mgcv) # for the example

car:::scatter3d.defaultコードをコピーして貼り付け、 に割り当てscatter3d.defaultます。

のコードの早い段階で次の行を追加しますscatter3d.default

 showLabels3d <- car:::showLabels3d  
 nice <- car:::nice  
  # since you will be losing their connection to the unexposed fns in car

次に、2 番目の に続くコード ブロックで、次のコードif(axis.scales){ ...}を置き換えます。

 if (axis.scales) {
   x.labels <-  seq(lab.min.x, lab.max.x, 
                       by=diff(range(lab.min.x, lab.max.x))/4)
   x.at <- seq(min.x, max.x, by=nice(diff(range(min.x, max.x))/4))
      rgl.texts(x.at, -0.05, 0, x.labels, col = axis.col[1])

   z.labels <-  seq(lab.min.z, lab.max.z, 
                       by=diff(range(lab.min.z, lab.max.z))/4)
   z.at <- seq(min.z, max.z, by=diff(range(min.z, max.z))/4)
      rgl.texts(0, -0.1, z.at, z.labels, col = axis.col[3])

   y.labels <-  seq(lab.min.y, lab.max.y, 
                       by=diff(range(lab.min.y, lab.max.y))/4)
   y.at <- seq(min.y, max.y, by=diff(range(min.y, max.y))/4)
      rgl.texts(-0.05, y.at, -0.05, y.labels, col = axis.col[2])
                }

(定期的にディスパッチされるメソッドのNAMESPACE をscatter3d.formula検索しないようにコードを置き換える必要がある場合があります。インタープリターが新しく定義された関数を最初に検索するように、内部の呼び出しを「scatter3d.default」に置き換えただけです。)carscatterscatter3dcar:::scatter3d.formula

編集:いじるよりも良い方法は、次のコードで名前空間/環境を新しい関数scatter3d.formulaに割り当てることです:car

environment(scatter3d.default) <- environment(car:::scatter3d.formula)

次に、これを行うと:

scatter3d(prestige ~ income + education, data=Duncan)

これを取得します(スクリーンショットプログラムで撮影) ここに画像の説明を入力

于 2011-11-21T01:24:53.350 に答える