1

plotTangentSpaceこれは、 in packageのヘルプ ページにある古典的な例geomorphです。2 つの行を追加するだけです。ベクトルの構築と、に従ってMyname配列の 1 つの次元に名前を付ける次の行です。Y.gpa$coordsMyname

library (geomorph)
data(plethodon)
Y.gpa<-gpagen(plethodon$land)    #GPA-alignment
ref<-mshape(Y.gpa$coords)
Myname = 41:80
dimnames(Y.gpa$coords)=list(NULL, NULL, Myname)
plotTangentSpace(Y.gpa$coords, label=T)

ご覧のとおりplotTangentSpace、ポイントによって作成されたプロットでは、名前を変更して目的とした 41:80 ではなく、1:40 というラベルが付けられていY.gpa$coordsます。に従ってポイントにラベルを付けたいと思い Mynameます。この例では、私の名前は単なる数字のベクトルですが、文字タイプでも機能するようにしたいと考えています。どうすればこれを達成できますか?

4

1 に答える 1

0

(R コンソールに入力するだけで)のコードを見ると、plotTangentSpace最初に「引数リスト」が見つかります。

function (A, axis1 = 1, axis2 = 2, warpgrids = TRUE, label = FALSE) 

ご覧のとおり、ラベルを「オン」または「オフ」(label = TRUEまたはFALSE) にすることができますが、ラベルの実際の値を設定するための引数はありません。さらに下には、デフォルトのハードコードされたラベル ( seq(1, n)) のコードが 2 か所にあります。

    if (label == T) {
        text(pcdata[, axis1], pcdata[, axis2], seq(1, n), 
            adj = c(-0.7, -0.7))

...ここpcdataで、、、axis1およびnは関数の先頭で定義されています。

したがって、ラベルの値を設定したい場合は、関数を少し書き直す必要があるようです。labels1 つの可能性は、に引数を追加することarglistです。
function (A, axis1 = 1, axis2 = 2, warpgrids = TRUE, label = FALSE, labels = NULL)

...両方のtext呼び出しで引数を変更します。

  text(pcdata[, axis1], pcdata[, axis2], labels, 
       adj = c(-0.7, -0.7))

名前空間のtps関数にもアクセスする必要があります。これは、 の両方のインスタンスの前にgeomorph追加することで実現できます。geomorph:::tps

  geomorph:::tps(ref, shape.min, 20)
  geomorph:::tps(ref, shape.max, 20)

次に、更新された関数を新しい関数名に割り当てます。

plotTangentSpace2 <- function (A, axis1 = 1, axis2 = 2, warpgrids = TRUE, label = FALSE, labels = NULL){
lots-of-stuff
text(pcdata[, axis1], pcdata[, axis2], labels, adj = c(-0.7, -0.7)) # in both places
more-stuff
geomorph:::tps(ref, shape.min, 20)
geomorph:::tps(ref, shape.max, 20)
}

'Myname' をラベルとして使用して、更新された関数でプロットします。
plotTangentSpace2(Y.gpa$coords, label = TRUE, labels = Myname) ここに画像の説明を入力

于 2013-11-14T14:39:37.837 に答える