【发布时间】:2016-02-21 22:29:10
【问题描述】:
我有一个风速和风向时间序列,我正在尝试制作一个使用线段来描绘风速和风向的图。我需要有一个风速与时间的基本点散点图(我可以创建),每个点都有一条线段(这是我挂断的地方)。线的长度必须与风速成正比,并且角度需要根据风向。我将 ggplot2 与 geom_segment 一起使用,但因为 x 是时间,我无法确定用于 xend 的正确公式。
以下是数据框的示例:
到目前为止,这是我的代码:
library(ggplot2)
library(lubridate)
Gustav <- read.csv("C:/Users/ezco3/My Research/LPBF/Pontchartrain-Maurepas Surge Consortium/Projects/Lake Tilting Effect Graphic/Datasets/Gustav_NewCanal_Hydro&Metero.csv")
Gustav$TS <- as.POSIXct(Gustav$DateTime, "%m/%d/%Y %H:%M", tz="America/Chicago")
Gustav$DelY <- Gustav$WINDSPEED_MPH*sin(Gustav$DIR)/max(Gustav$WINDSPEED_MPH, na.rm=TRUE)
Gustav$DelX <- Gustav$WINDSPEED_MPH*cos(Gustav$DIR)/max(Gustav$WINDSPEED_MPH, na.rm=TRUE)
plt1 <- ggplot(data = Gustav, aes(x = TS, y =WINDSPEED_MPH))
plt1 + geom_point(color="blue") +
geom_segment(data = Gustav, mapping=aes(x= TS, y = WINDSPEED_MPH, xend = TS + 18000*DelX,
yend=WINDSPEED_MPH + 5*DelY),size=.1,color="red")
DelX 前面的 18000 和 DelY 前面的 5 都是我通过跟踪和错误找到的任意数字。基本上,最初只使用 DelX 和 DelY(不带乘数),线条又短又垂直,所以我尝试了不同的选项,直到找到这对显示线条的方向。
但是,角度不正确。在这个阶段,我不明白单位如何与 lubridate 中的时间序列对象一起工作,所以我不知道如何计算 xend 的正确公式。
任何建议将不胜感激。
谢谢!!!
【问题讨论】:
-
您能否提供您的数据样本供我们使用?只需将
dput(Gustav)的输出粘贴到您的问题中即可。您不需要粘贴整个内容。 10 或 20 行(例如,dput(Gustav[1:20,]))就足够了。 -
您的角度似乎被拉伸了,因此这些线段指向上方或下方。我的猜测是,这是因为 x 轴上的单位与 y 轴上的单位不同。是否有一些因素将 x 轴和 y 轴上的单位与图中的单位相关联?也许你可以使用不同的因子而不是 18000。
-
这不是单位本身的不同,而是 x 值的范围与 y 值的范围不同。在这种情况下,x 值以秒为单位,x 轴跨越约 864000 秒(10 天),而 y 轴以 mph 为单位,跨越约 50 mph。 864000/50 = 17280,接近 OP 提出的 18000 比例因子。但是,例如,如果我们将 x 轴的长度设置为仅 50 秒(这在此处没有用处),则方向线将被正确缩放。
-
要正确缩放方向线,请将
DelX乘以 x 轴范围与 y 轴范围的比率。为了得到这个精确,您应该使用coord_cartesian设置 x 和 y 轴范围,然后将它们的范围之比作为比例因子。
标签: r ggplot2 time-series lubridate