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値、列見出しを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 に答える