2013-12-13 2 views
2

Я хотел бы создать граненый участок с использованием ggplot2, представляющий ежемесячные ветровые годограммы.Годограмма с использованием ggplot2

Я недавно прочитал следующее сообщение: How to map wind direction and speed (velocity plot) with R. Я думаю, что это, наверное, хорошее начало для меня. Следующий набор данных представляет значения windvalues ​​как компоненты u и v с временным интервалом 3 часа. Я хотел бы представить его как годограмму, что означает, что каждый вектор следует за предыдущим.

   u    v 
[1,] -4.0000000 -6.928203e+00 
[2,] -6.1283555 -5.142301e+00 
[3,] -5.0000000 1.224647e-15 
[4,] -3.7587705 1.368081e+00 
[5,] 4.0000000 -4.898587e-16 
[6,] 4.6984631 -1.710101e+00 
[7,] 5.6381557 2.052121e+00 
[8,] 6.1283555 5.142301e+00 
[9,] -9.1925333 -7.713451e+00 
[10,] -6.5778483 2.394141e+00 
[11,] -5.3623111 4.499513e+00 
[12,] -4.5962667 3.856726e+00 
[13,] -7.0000000 1.714506e-15 
[14,] -6.5778483 -2.394141e+00 
[15,] 6.0000000 -7.347881e-16 
[16,] -6.5778483 -2.394141e+00 
[17,] -6.0000000 1.469576e-15 
[18,] -8.0000000 1.959435e-15 
[19,] -5.6381557 2.052121e+00 
[20,] -6.0000000 1.469576e-15 
[21,] -4.5962667 3.856726e+00 
[22,] 2.0000000 -3.464102e+00 
[23,] 5.6381557 -2.052121e+00 
[24,] 6.0000000 -7.347881e-16 
[25,] 5.6381557 -2.052121e+00 
[26,] -5.3623111 -4.499513e+00 
[27,] -4.5962667 -3.856726e+00 
[28,] -6.1283555 -5.142301e+00 
[29,] -4.6984631 -1.710101e+00 
[30,] 0.8682409 -4.924039e+00 
[31,] 2.5000000 -4.330127e+00 
[32,] -0.8682409 -4.924039e+00 
[33,] -6.0000000 1.469576e-15 
[34,] -5.3623111 -4.499513e+00 
[35,] -3.8302222 -3.213938e+00 
[36,] -4.5962667 -3.856726e+00 
[37,] -3.5000000 -6.062178e+00 
[38,] 1.0418891 -5.908847e+00 
[39,] 5.3623111 -4.499513e+00 
[40,] 4.5962667 -3.856726e+00 
[41,] 3.8302222 -3.213938e+00 
[42,] 3.0000000 -5.196152e+00 
[43,] 5.3623111 -4.499513e+00 
[44,] 5.3623111 -4.499513e+00 
[45,] 4.5962667 -3.856726e+00 
[46,] 3.0000000 -5.196152e+00 
[47,] 4.5962667 -3.856726e+00 
[48,] 3.8302222 -3.213938e+00 
[49,] 1.0418891 -5.908847e+00 
[50,] 3.8302222 -3.213938e+00 

Вы можете найти пример hodogram здесь: enter image description here (как один на нижнем левом углу).

С этими годограммами (1 в месяц) я хотел бы построить графовый график с ggplot2, но я думаю (надеюсь), что могу управлять этой частью.

Любая помощь будет оценена по достоинству.

Большое спасибо заранее!

+1

Возможно, вы можете показать нам, что вы пробовали до сих пор. –

+0

На самом деле, моя проблема - это начало, потому что мой первоначальный набор данных - это таблица (0-360 °)/интенсивность (м.с-1). Я преобразовал его в векторы u и v, чтобы попробовать команду «hodogram» в пакете «RSEIS». Этот пакет не соответствует моим потребностям и не предлагает возможности для настройки. Поэтому я пытаюсь найти код ходограммы в Интернете, но я не мог найти его нигде. –

ответ

0

Вот мой результат. Он нуждается в некоторых улучшениях, но я близок к результату, который я хотел, как описано в сообщении. Вот код, который я использовал:

library("ggplot2") 
library("plyr") 
mydata <- read.table("C:\\myfile.csv", sep="\t", header=TRUE) 
seasons <- mydata$seasons 
years <- mydata$year 
u <- mydata$u 
v <- mydata$v 
intensity <- mydata$intensity 
wind <- cbind(u,v,intensity,seasons,years) 
wind <- data.frame(wind) 
x <- ddply(wind, .(years, seasons), summarize, x=cumsum(u*0.0108)) 
y <- ddply(wind, .(years, seasons), summarize, y=cumsum(v*0.0108)) 
x <- x$x 
y <- y$y 
wind <- cbind(wind,x,y) 
wind <- data.frame(wind) 
wind$seasons[wind$seasons == 1] <- "winter" 
wind$seasons[wind$seasons == 2] <- "spring" 
wind$seasons[wind$seasons == 3] <- "summer" 
wind$seasons[wind$seasons == 4] <- "autumn" 
p <- ggplot(wind, aes(x, y)) + geom_path(aes(colour = intensity))+ scale_colour_gradientn(colours=c("blue","yellow","red")) 
p + facet_grid(seasons ~ years) 

дает мне следующий результат:

enter image description here

Еще раз спасибо сообществу StackOverflow, который всегда очень реактивная и полезно!

2

я получил что-то, я все еще работаю над этим ...

u <- mydata$u 
v <- mydata$v 
x <- cumsum(mydata$u[56297:56704]*10.8) 
y <- cumsum(mydata$v[56297:56704]*10.8) 
wind <- cbind(x,y) 
wind <- data.frame(wind) 
p <- ggplot(wind) + geom_path(aes(x, y, colour = x)) 

enter image description here

Продолжение ... не стесняйтесь комментировать!)

2

Вот концепция того, как я это сделаю. Я позволю вам возиться с деталями (например, удалять заголовки).

library(ggplot2) 
library(gridExtra) 
library(MASS) 

linedata <- data.frame(time = rep(1:200, 3), 
         vals = runif(600), 
         source = rep(letters[1:3], each = 200)) 

normdata <- as.data.frame(mvrnorm(n = 600, mu = c(0, 0), Sigma = matrix(c(0.5, 0, 0, 0.5), ncol = 2))) 
normdata$time <- rep(1:200, times = 3) 
normdata$source = rep(letters[1:3], each = 200) 
names(normdata)[1:2] <- c("x", "y") 

linegraph <- ggplot(linedata, aes(x = time, y = vals)) + 
    theme_bw() + 
    geom_line() + 
    facet_wrap(~ source, ncol = 1) 

normgraph <- ggplot(normdata, aes(x = x, y = y)) + 
    theme_bw() + 
    geom_path() + 
    facet_wrap(~ source, ncol = 3) 

grid.arrange(linegraph, normgraph, ncol = 1) 

enter image description here

+0

Благодарим вас за то, что вы очень за ваш ответ! Мне все еще нужно использовать «cumsum», чтобы получить реальную годограмму, но ваш код поможет мне получить мой последний график. Я верну свой последний результат в теме, THX снова! –