2013-11-14 4 views
1

Вот классический пример, найденный на странице справки для plotTangentSpace в пакете geomorph. Я просто добавляю две строки: построение вектора Myname и следующую строку, которая определяет одно измерение массива Y.gpa$coords в соответствии с Myname.Изменить метки метки на графике, созданном plotTangentSpace в пакете «geomorph»

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. В этом примере мое имя - всего лишь вектор чисел, но я бы хотел, чтобы он работал и для типа символа. Как я могу это достичь?

ответ

0

Если вы посмотрите на код для plotTangentSpace (просто введите его в R консоли), сначала найти «список аргументов»:

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

Как вы видите, вы можете включить метки «на» или «off» (label = TRUE или FALSE), но нет аргументов для установки фактического значения меток. Дальше вы найдете код по умолчанию, жестко закодированные этикетки (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 пространстве имен , Это может быть achived путем добавления 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) enter image description here

Смежные вопросы