2

基本上我有2个矩阵(u和v)的列表,其中包含经度和纬度方向的风速(以及包含坐标的向量x和y)。我想制作一张带有指向结果方向的箭头的地图,其大小与风速成正比。之前有人问过这个问题:http: //www.mail-archive.com/r-help@r-project.org/msg18875.html。不幸的是,答案中给出的链接已损坏。我尝试使用 quiver 功能,但无法正常工作。

这是我的数据的样子:

x=seq(10,15,by=0.25)
y=seq(40,50,by=0.25)
u=matrix(runif(length(x)*length(y),-2,3),nrow=length(y),ncol=length(y))
v=matrix(runif(length(x)*length(y),-2,3),nrow=length(y),ncol=length(y))
wind=list(u,v)

对于 quiver 函数:

library(pracma)
quiver(x=x, y=y, u=wind[[1]], v=wind[[2]])

这给出了两次:

Error: invalid graphics state

我假设 u 和 v 是错误的并且也需要是坐标,但老实说我不理解包描述中给出的解释(u,v:起点的 x,y 坐标)。

我看到更多信息可用于 matlab 或 python 中的 quiver,但我从未使用过它,因此任何关于在 R 中执行此操作的建议将不胜感激。

4

1 回答 1

7
x=seq(10,15,by=0.25)
y=seq(40,50,by=0.25)
u=matrix(runif(length(x)*length(y),-2,3),nrow=length(x),ncol=length(y))
v=matrix(runif(length(x)*length(y),-2,3),nrow=length(x),ncol=length(y))
#note that I corrected these

#melt for plotting
library(reshape2)
u <- melt(u,value.name = "u")
v <- melt(v,value.name = "v")
wind <- merge(u, v)
wind$x <- x[wind[,1]]
wind$y <- y[wind[,2]]


#plot
library(ggplot2)
library(grid)
scaler <- 1

p <- ggplot(wind, aes(x=x, y=y, xend=x+u*scaler, yend=y+v*scaler)) + geom_segment(arrow=arrow())
print(p)

在此处输入图像描述

于 2013-09-27T12:57:05.853 回答