Некоторые обсуждения в чате указывают, что levelplot()
обрабатывает случай тепловой карты (где одна или обе переменные являются дискретными / категориальными) просто отлично.Поэтому нам просто нужно получить данные в правильном формате.Один из способов сделать это - сохранить как минимум координату y
как фактор с соответствующим набором уровней.
Сначала смоделируйте некоторые данные в соответствии с данными ОП:
yholes <- c(LETTERS, sort(outer(LETTERS, LETTERS, paste, sep="")))[1:30]
xholes <- seq_along(yholes)
g <- expand.grid(X = xholes, Y = yholes)
set.seed(2)
dat <- with(g, data.frame(Y = factor(Y, levels = yholes),
X = X,
vals = runif(900)))
, что дает:
R> head(dat)
Y X vals
1 A 1 0.1848823
2 A 2 0.7023740
3 A 3 0.5733263
4 A 4 0.1680519
5 A 5 0.9438393
6 A 6 0.9434750
Причина вызова expand.grid()
состоит в том, что levelplot()
при использовании через метод формулы, который я собираюсь использовать, нуждается в Y
иX
для каждой точки данных (в нашем случае 900 из них).
В этом случае график легко составить с помощью простой формулы в levelplot()
:
require(lattice)
levelplot(vals ~ X + Y, data = dat)
, которая даетэто: