Ach*_*hak 6 plot r time-series ggplot2 rgraph
下午好,
我正在尝试制作一个时间序列图,箭头显示风向,并着色显示风速强度.最终我试图获得这样的情节(只是我在网上找到的一个示例图片):

我设法找到一个类似的帖子(见下文),我试图遵循,但我坚持正确显示风向箭头.
上一篇类似的帖子: ggplot2带箭头/向量的风时间序列
我到目前为止所编的代码如下:
require(ggplot2)
require(scales)
require(gridExtra)
require(lubridate)
dat <- data.frame(datetime = ISOdatetime(2013,08,04,0,0,0) +
seq(0:23)*60*60, pollutant = runif(24, 25, 75))
## create wind speed data
dat$ws <- runif(nrow(dat), 0 , 15 )
## create wind direction data
dat$wd <- runif(nrow(dat), 0 , 360 )
# define an end point for geom_segment
dat$x.end <- dat$datetime + minutes(60)
ggplot(data = dat, aes(x = datetime, y = pollutant)) +
geom_line() +
geom_segment(data = dat,
size = 1,
aes(x = datetime,
xend = x.end,
y = pollutant,
yend = wd),
arrow = arrow(length = unit(0.5, "cm"))) +
theme()
Run Code Online (Sandbox Code Playgroud)
使用上面的代码我得到以下图:

你可以看到情节开始我希望它开始的箭头,但方向和终点太长,我不知道如何将其缩放为一个颜色编码为速度的较短箭头.我非常感谢您对我如何实现这一目标的任何指导.
非常感谢,阿燕
上面显示的图没有给出正确的方向 - 例如dat$wd[1]大约 190\xc2\xb0 ,所以如果 0\xc2\xb0 对应于向右的水平箭头, 190\xc2\xb0 应该给你一个指向左侧的箭头并略有下降。
要获得方向正确的箭头,您需要将风向的余弦和正弦添加到箭头的起点以定义其端点(请参见下面的代码)。这里的困难问题是箭头在 x 和 y 方向上的缩放,因为 (1) 这些轴的比例完全不同,因此箭头的“长度”实际上并没有任何意义,(2) 箭头的纵横比绘图设备会扭曲箭头的视觉长度。
\n\n我在下面发布了一个解决方案草图,其中我将 x 和 y 方向上箭头的偏移量缩放用于绘图的变量范围的 10%,但这不会产生统一视觉长度的向量。无论如何,这些箭头的长度都没有明确定义,因为(a)x 轴和 y 轴代表不同的单位,(b)更改绘图的纵横比将更改这些箭头的长度。
\n\n## arrows go from (datetime, pollutant) to\n## (datetime, pollutant) + scaling*(sin(wd), cos(wd))\nscaling <- c(as.numeric(diff(range(dat$datetime)))*60*60, # convert to seconds \n diff(range(dat$pollutant)))/10\ndat <- within(dat, {\n x.end <- datetime + scaling[1] * cos(wd / 180 * pi)\n y.end <- pollutant + scaling[2] * sin(wd / 180 * pi)\n})\n\n\nggplot(data = dat, aes(x = datetime, y = pollutant)) +\n geom_line() +\n geom_segment(data = dat,\n size = 1,\n aes(x = datetime,\n xend = x.end,\n y = pollutant,\n yend = y.end,\n colour=ws),\n arrow = arrow(length = unit(0.1, "cm"))) +\nscale_colour_gradient(low="green", high="red") \nRun Code Online (Sandbox Code Playgroud)\n\n\n\n\n