1

考虑以下:

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 即“数据”由日期时间向量和在不同深度记录的相应温度测量值组成,其中每个测量值的深度作为列名给出。

由此我想生成温度曲线的填充等高线图。因此,我想将 DateTime 向量作为 x 值,将 col 标题作为 y 值,将 temp 作为 z 值。我将如何实现这一目标?

我刚刚从 matlab 转换为 R,所以很抱歉这可能是一个非常简单的问题。

4

1 回答 1

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页面。

于 2012-05-29T19:35:27.450 回答