data.frame中的等高线图

时间:2012-05-29 19:03:02

标签: r contour

请考虑以下事项:

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,所以很抱歉这可能是一个非常简单的问题。

1 个答案:

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