контурный график из data.frame

Учтите следующее:

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 = "")) 

Не принимайте во внимание 3 строки, используемые при создании data.frame, поскольку они просто используются для создания аналогичного примера, с которым я сейчас работаю. Data.frame, то есть «Данные», состоит из вектора даты и времени и соответствующих измерений температуры, записанных на разных глубинах, где глубина каждого измерения указана в виде имен столбцов.

Исходя из этого, я хотел бы создать контурный график температурного профиля с заливкой. Итак, я хочу разместить вектор DateTime как значения x, заголовки col как значения y и temp как значения z. Как мне добиться этого?

Я только что перешел с Matlab на R, поэтому извиняюсь за, вероятно, очень простую проблему.


person user1407388    schedule 29.05.2012    source источник


Ответы (1)


Решетка делает это довольно просто, если у вас есть данные в правильной структуре (длинные и тонкие, а не широкие и короткие - в данный момент они у вас есть в последнем)

Сначала приведите данные в требуемый формат, используя несколько простых манипуляций с данными.

## 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 для получения дополнительной информации о различных вариантах.

person Gavin Simpson    schedule 29.05.2012