发布于 2012-12-16 04:10:07
您链接到的答案中的代码的问题是,只有当levelplot的公式中的对象名为x、y和z时,它才有效。
下面是一个使用更标准的习惯用法来处理传递给自定义面板函数的参数的示例,因此变得更加适用:
library("lattice")
## Example data
x <- seq(pi/4, 5*pi, length.out=10)
y <- seq(pi/4, 5*pi, length.out=10)
grid <- expand.grid(X=x, Y=y)
grid$Z <- runif(100, -1, 1)
## Write a panel function (after examining 'args(panel.levelplot) to see what
## will be being passed on to the panel function by levelplot())
myPanel <- function(x, y, z, ...) {
panel.levelplot(x,y,z,...)
panel.text(x, y, round(z,1))
}
## Try it out
levelplot(Z ~ X*Y, grid, panel = myPanel)

发布于 2012-12-16 04:31:05
mat <- read.csv("J_H2S1T6_PassTraffic.csv", header=F)
y <- as.numeric(mat[1,-1])
mat <- mat[-1,-1]
n <- dim(mat)[1]这里是一个修改,我生成了一个新的比例
x <- seq(min(y), max(y), length.out=n)
grid <- expand.grid(x=x, y=x)
mat <- as.matrix(mat)
dim(mat) <- c(n*n,1)
grid$z <- mat这里是修改的地方。我将矩阵的维度更改为向量,以将其放入网格中。
mat <- as.matrix(mat)
dim(mat) <- c(n*n,1)
grid$z <- mat
p <- levelplot(z~x*y, grid,
panel=function(...) {
arg <- list(...)
panel.levelplot(...)
panel.text(arg$x, arg$y,arg$z)},
scales = list(y = list(at=y,labels=y),
x = list(at=y,labels=y)))
print(p)

发布于 2012-12-16 04:27:45
另一种选择是使用latticeExtra中的layer()。它允许您使用ggplot2爱好者熟悉的+运算符将一个绘图叠加到另一个绘图上:
library(latticeExtra)
## Applied to the example data in my other answer, this will produce
## an identical plot
levelplot(Z ~ X*Y, data = grid) +
layer(panel.text(X, Y, round(Z, 1)), data = grid)https://stackoverflow.com/questions/13895480
复制相似问题