Ввод значений ячеек из матрицы в график уровней, сделанный в решетке в r

Я знаю об этом потоке - Как показать значения матрицы на Levelplot

и этот поток - Отображение значений данных на графике уровня в R

которые задают подобные вопросы. Но я не совсем понимаю, как я могу адаптировать код к тому, что я пытаюсь сделать.

У меня есть матрица (M1), из которой я могу сделать график уровня. Что я хотел бы сделать, так это добавить соответствующее значение из каждой «ячейки» в M1 в соответствующую «ячейку» на графике уровней. Я пытался с panel.levelplot, но я просто не могу понять, как определить переменные x, y, z.

Последующий вопрос будет... могу ли я создать график уровня из матрицы M1, но я хочу добавить значения из другой матрицы (M2) точно такого же размера. Как это может быть сделано?

Пример данных:

#Matrix1
M1 <- matrix(0, nrow=5, ncol=5)
M1[upper.tri(M1, diag = FALSE)]<-1
M1

#Matrix2
M2<-matrix(sample.int(25, replace = TRUE), nrow = 5, ncol = 5)
M2

#This makes a levelplot but how to add the values from a) Matrix M1, b) Matrix M2
levelplot(M1[1:ncol(M1),ncol(M1):1])

person jalapic    schedule 03.04.2014    source источник


Ответы (1)


Например, следуя первому вопросу, вы просто немного модифицируете его, чтобы включить значения M2.

myPanel <- function(x, y, z, ...) {
  panel.levelplot(x,y,z,...)
  panel.text(x, y,  M2[cbind(x,y)]) ## use handy matrix indexing
}

Затем вы получаете результат:

levelplot(M1,panel=myPanel)

введите здесь описание изображения

Чтобы сориентировать все это так, чтобы M1[1,1] было в верхнем левом углу, как если бы вы просто напечатали M1, сделайте это следующим образом (см. комментарий Брайана):

M3 <- t(M1[nrow(M1):1,])
levelplot(M3, panel = myPanel)
person agstudy    schedule 03.04.2014
comment
Спасибо - я думаю, что это половина пути. Единственная проблема заключается в том, что мой запуск этих наложенных чисел не соответствует правильным ячейкам. Если мы сделаем M1, которая является определенной матрицей (M2 — это случайные числа и будут выглядеть по-разному для разных пользователей), то график, показанный выше, представляет собой график строки (ось x) и столбца (ось y). Матрица, рассматриваемая визуально как таблица чисел, состоит из строк по оси y и столбцов по оси x. (т. е. верхний треугольник имеет 1, а нижний треугольник - 0). Есть ли способ переключить график уровней так, чтобы он выглядел как исходная матрица в конфигурации? - person jalapic; 03.04.2014
comment
Я попытался использовать команду as.table=TRUE из раздела справки ?xyplot, но это, похоже, ничего не делает ??? - person jalapic; 03.04.2014
comment
Недостающая часть, которая вам нужна, это сделать M2 <- t(M1[nrow(M1):1,]), а затем вызвать вашу функцию, используя M2. Причина этого в том, что все функции levelplot, contour и image были построены так, что M[1,1] находится в левом нижнем углу. Эта ориентация была сохранена для совместимости. - person Bryan Hanson; 17.12.2014