我正在研究我的情节的一些细节,我发现了一个我无法绕过的地方。在我的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)")
答案 0 :(得分:7)
不是一般解决方案。使用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
))
)
答案 1 :(得分:4)
关于聊天的一些讨论表明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)))
给出:
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)
产生这个: