изменить числовые метки на буквы на графике уровня - PullRequest
2 голосов
/ 07 июня 2011

Я работаю над некоторыми деталями на своих участках и нашел один, который не могу обойти.На моем уровне находятся цифровые отметки.Теперь я хочу, чтобы мои отметки на оси Y были изменены на соответствующие буквы.(т.е. 1 = A, 5 = E, 27 = AA, 29 = AC, ...)

Я уже использовал

scales=list(
    y=list(alternating=3,labels=toupper(c(letters[1],letters[5],letters[10],letters[15])))))

Но я хочу, чтобы они менялись в зависимости отчто на оси Y, а не из значений, которые я даю.Кто-нибудь может мне помочь в этом?

levelplot(volcano,main="levelplot(volcano)")

enter image description here

Ответы [ 2 ]

7 голосов
/ 07 июня 2011

Не общее решение. Используйте pretty для вычисления at самостоятельно.

y_at <- pretty(seq_len(ncol(volcano)))
y_labels <- c(LETTERS, outer(LETTERS, LETTERS, paste, sep=""))
levelplot(
    volcano, main="levelplot(volcano)",
    scales=list(y=list(
        alternating=3,
        labels=y_labels[round(y_at)],
        at=y_at
    ))
)

Lattice levelplot with change y axis

4 голосов
/ 07 июня 2011

Некоторые обсуждения в чате указывают, что 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)

, которая даетэто:

levelplot produced by the code

...