1

plotTangentSpace这是在 in package的帮助页面上找到的经典示例geomorph。我只添加了两行:向量的构造Myname和以下Y.gpa$coords根据Myname.

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点创建的图上标记为 1:40 而不是 41:80,正如我打算通过重命名所做的那样Y.gpa$coords。我想根据 标记点 Myname。对于这个例子,我的名字只是一个数字向量,但我希望它也适用于字符类型。我怎样才能做到这一点?

4

1 回答 1

0

如果您查看代码plotTangentSpace(只需在 R 控制台中输入),您首先会找到“参数列表”:

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

如您所见,您可以将标签“打开”或“关闭”(label = TRUEFALSE),但没有设置标签实际值的参数。seq(1, n)再往下,您可以在两个地方找到默认的硬编码标签 ( ) 的代码:

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

...其中pcdata, axis1, 和n在函数的开头定义。

因此,如果要设置标签的值,似乎需要稍微重写函数。一种可能性是在 中添加一个labels参数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 回答