请考虑以下事项:
temp <- array(sample(1:100,12), dim=c(365,12))
Depth <- as.vector(seq(1,12,by=1))
time <- seq(from=as.Date("2011-01-01"), to=as.Date("2011-12-31"), by=1)
Data <- data.frame(Time = time, Temp = as.matrix(temp))
colnames(Data) <- c("Datetime", paste(Depth,"m",sep = ""))
不要考虑生成data.frame时使用的3行,因为它们仅用于生成我目前正在使用的类似示例。 data.frame,即'Data'包括日期时间向量和在不同深度记录的相应温度测量值,其中每个测量值的深度作为列名称给出。
由此我想生成温度曲线的填充等高线图。因此,我想将DateTime向量作为x值,将col标题作为y值,将temp作为z值。我将如何实现这一目标?
我刚刚从matlab转换为R,所以很抱歉这可能是一个非常简单的问题。
答案 0 :(得分:6)
Lattice让你很容易就是你拥有正确结构的数据(长而细不宽而短 - 你现在拥有它)
首先使用一些简单的数据操作将数据转换为所需的格式
## make the colnames numeric-ish
names(Data)[-1] <- sub("m", "", names(Data)[-1])
## stack the data
Data2 <- data.frame(Time = rep(Data$Datetime, times = ncol(Data)-1),
stack(Data[, -1]))
names(Data2)[-1] <- c("Temperature", "Depth")
## make Depth numeric
Data2 <- transform(Data2, Depth = as.numeric(as.character(Depth)))
这给了我们:
> head(Data2)
Time Temperature Depth
1 2011-01-01 84 1
2 2011-01-02 19 1
3 2011-01-03 25 1
4 2011-01-04 21 1
5 2011-01-05 1 1
6 2011-01-06 26 1
加载lattice
并使用contourplot()
函数绘制数据:
require(lattice)
contourplot(Temperature ~ Time * Depth, data = Data2)
对于此示例数据集,可能有助于使用
contourplot(Temperature ~ Time * Depth, data = Data2, labels = FALSE,
region = TRUE)
因为轮廓基本上围绕着微小的数据块形成。
有关各种选项的详情,请参阅?contourplot
页面。