R 将levelplot上的数字记号更改为字母

R 将levelplot上的数字记号更改为字母,r,lattice,R,Lattice,我正在研究一些关于我的情节的细节,我发现了一个我无法回避的细节。在我的水平图上有数字记号。现在我想把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(

我正在研究一些关于我的情节的细节,我发现了一个我无法回避的细节。在我的水平图上有数字记号。现在我想把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)")

不是一般的解决方案。使用
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
    ))
)

y\u at一些关于chat的讨论表明
levelplot()
可以很好地处理热图情况(其中一个或两个变量是离散的/分类的)。因此,我们只需要将数据转换成正确的格式。一种方法是至少存储
y
坐标作为设置了适当级别的因子

首先,沿着OP的数据线模拟一些数据:

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)))
调用
expand.grid()
的原因是
levelplot()
,当通过公式方法使用时(我将要使用公式方法),每个数据点需要
Y
X
(本例中为900个)

然后,通过
levelplot()中的一个简单公式即可轻松生成绘图:

这就产生了:


您可以将
touper(字母[1],字母[5],字母[10],字母[15])简化为
字母[c(1,5,10,15)]
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
require(lattice)
levelplot(vals ~ X + Y, data = dat)