2013-08-07 31 views
7

Từ dữ liệu khí tượng (giá trị theo giờ của nhiệt độ, gió và độ ẩm) Tôi quản lý để vẽ lô thời gian tốc độ và hướng gió. Bây giờ tôi muốn thêm các vectơ gió vào lô thời gian. Ở đây bạn có thể thấy đầu ra tôi muốn (mũi tên được vẽ trên ô thực tế).ggplot2 loạt thời gian gió với mũi tên/vectơ

enter image description here

Tôi đang sử dụng ggplot2, được tìm kiếm thông qua stackoverflow, tài liệu gói ggplot2 (sẽ tiếp tục) nhưng không có giải pháp được tìm thấy. Bất kỳ ý tưởng hoặc chỉ dẫn nơi để tìm sẽ là một điểm khởi đầu.

Cảm ơn trước

EDIT HỎI Như đã đề cập trong một chú thích bởi @slowlearner tôi thêm ở đây mã và dữ liệu để đưa một ví dụ tái sản xuất. Có vẻ như geom_segment có thể làm được điều này. Tôi quản lý để tính toán yend trong geom_segment nhưng không thể tìm ra cách để tìm xend như trục x là một trục thời gian. Tôi đã có dữ liệu tốc độ và hướng gió để tôi có thể tính toán các thành phần gió x, y cho geom_segment nhưng x cần được chuyển đổi thành định dạng thời gian.

Đây là mã dùng cho cốt truyện (nhiệt độ) và data

for (i in 1:2) { 

rams=subset(data,data$stat_id %in% i) 
tore=subset(torre,torre$stat_id %in% i) 

# Gràfica en ggplot 

# Gráfica de evolución temporal de las estaciones de la zona 

gtitol=places$nom[places$stat_id == i] 

myplot=ggplot(data=rams,aes(x=datetime, y=tempc, colour="RAMS")) + 
    geom_line() + ylab("Temperatura (ºC)") + xlab(" ") + 
    ggtitle(gtitol) + theme(legend.title=element_blank()) + theme(legend.position="bottom") + 
    scale_y_continuous(limits = c(0,40)) + 
    geom_line(data=tore,aes(x=datetime,y=temp,colour = "Torre")) 
#scale_y_continuous(breaks = round(seq(min(data$tempc), max(data$tempc), by = 2),0)) 


ggsave(myplot,filename=paste("RAMS-",i,".png",sep=""),width=7.78,height=5.79) 

} 

Sau docs geom_segment tôi đã cố gắng

p=ggplot(tore, aes(x =datetime, y = 5)) 
p + geom_segment(aes(xend = datetime, yend = 5 + v), arrow = arrow(length = unit(0.1,"cm"))) 

Bắt loại hình. Bạn có thể thấy x tọa độ là datetime, làm thế nào tôi nên chuyển đổi thành phần gió để có được xend? Bây giờ xend bằng datetime nhưng tôi muốn một cái gì đó như "datetime + xwindcomp"

enter image description here

Nhờ sự giúp đỡ của bạn

+2

Xem 'geom_segment' và lưu ý rằng nó có đối số 'mũi tên'. – joran

+1

kiểm tra calenderPlot() từ gói không khí mở, nó có thể là một số trợ giúp, mặc dù nó không làm cho chuỗi thời gian. – eliavs

+1

'geom_segment (aes (x = 0, y = 0, xend = xend, yend = 0), dòng, mũi tên = mũi tên (loại =" đóng ", góc = 23), màu =" đỏ ", size = 1.0) 'là những gì tôi sử dụng để vẽ một mũi tên trong biểu đồ ggplot. Đó có phải là điều bạn cần biết không? Btw: 'arrow' là một hàm trong gói' grid'. – ROLO

Trả lời

3

Cũng giống như một lời mở đầu, hãy chắc chắn rằng bạn bao gồm tất cả các dữ liệu mã và có liên quan trong thời gian tới câu hỏi. Nếu bạn nhìn vào câu hỏi của bạn ở trên, bạn sẽ thấy rằng một số đối tượng như torre không được xác định. Điều đó có nghĩa là chúng tôi không thể sao chép và dán vào các thiết lập R của chúng tôi. Ngoài ra, dữ liệu mà bạn đã liên kết không thể được sử dụng với mã trong câu hỏi vì nó là một tập con giới hạn. Lời khuyên của tôi: (a) tạo dữ liệu giả mạo giống như dữ liệu bạn đang sử dụng (b) giữ mã của bạn ở mức tối thiểu (c) thử nghiệm và kiểm tra kỹ mã và dữ liệu trong phiên R mới trước bạn đăng.

Theo như tôi có thể cho bạn biết điều gì đó giống như bên dưới. Tất nhiên bạn sẽ phải thích nghi nó cho mục đích của riêng bạn, nhưng nó sẽ cung cấp cho bạn một số ý tưởng về cách giải quyết vấn đề của bạn. Chú ý hầu hết các tính chất mỹ phẩm như màu sắc đường kẻ, độ dày, truyền thuyết và tiêu đề đã bị bỏ qua khỏi cốt truyện: chúng không quan trọng cho mục đích của câu hỏi này. EDIT Một cách tiếp cận khác có thể là sử dụng cùng một khung dữ liệu cho dữ liệu gió và sau đó sử dụng một biến faceting để hiển thị tốc độ trong một cốt truyện khác nhưng được nối kết.

require(ggplot2) 
require(scales) 
require(gridExtra) 
require(lubridate) 
set.seed(1234) 

# create fake data for temperature 
mydf <- data.frame(datetime = ISOdatetime(2013,08,04,0,0,0) + 
        seq(0:50)*10*60, 
        temp = runif(51, 15, 25)) 

# take a subset of temperature data, 
# basically sampling every 60 minutes 
wind <- mydf[minute(mydf$datetime) == 0, ] 
# then create fake wind velocity data 
wind$velocity <- runif(nrow(wind), -5, 20) 
# define an end point for geom_segment 
wind$x.end <- wind$datetime + minutes(60) 

ggplot(data = mydf, aes(x = datetime, y = temp, group = 1)) + 
    geom_line() + 
    geom_segment(data = wind, 
       size = 3, 
       aes(x = datetime, 
        xend = x.end, 
        y = 10, 
        yend = velocity), 
       arrow = arrow(length = unit(0.5, "cm"))) + 
    theme() 

này tạo ra cốt truyện sau: screenshot

+0

Cảm ơn @slowlearner Nó hoạt động tuyệt vời, chính xác những gì tôi đang tìm kiếm. Tôi xin lỗi vì dữ liệu, nghĩ rằng nó là đủ với các dữ liệu được sử dụng trong vòng lặp cho âm mưu. Chỉ muốn tránh bạn trước khi định dạng dữ liệu lệnh. Cố gắng làm tốt nhất lần sau và cảm ơn lần nữa. – pacomet

0

Tính theo hướng gió bằng độ thập phân. Giả sử bạn muốn 0 độ là Bắc (lên), hãy sử dụng như sau:

ggplot(data = wind, aes(x=datetime, y=temp)) + 
    geom_text(aes(angle=-wind_dir_degrees+90), label="→") 
Các vấn đề liên quan