gpt4 book ai didi

r - ggplot2 段——x 轴为时间时的方向

转载 作者:行者123 更新时间:2023-12-05 00:20:40 32 4
gpt4 key购买 nike

我有一个风速和风向时间序列,我正在尝试绘制一个使用线段来描绘风速和风向的图。我需要有一个风速与时间(我可以创建)的基本点散点图,每个点都有一条线段(这是我挂断的地方。)线的长度必须与风速成正比,并且角度需要风向。我将 ggplot2 与 geom_segment 一起使用,但是因为 x 是时间,我无法找出用于 xend 的正确公式。

这是数据框的示例:

  • 日期时间 WINDSPEED_MPH 目录
  • 8/29/2008 0:00 4.28 231
  • 8/29/2008 1:00 3.11 236
  • 2008/8/29 2:00 1.36 237
  • 8/29/2008 3:00 2.92 153
  • 8/29/2008 4:00 1.94 314
  • 8/29/2008 5:00 3.11 293

  • 到目前为止,这是我的代码:
    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")

    而且,这创造了这个:
    enter image description here

    DelX 前面的 18000 和 DelY 前面的 5 都是我通过跟踪和错误找到的任意数字。基本上,最初只使用 DelX 和 DelY(没有乘法器),这些线又短又垂直,所以我尝试了不同的选项,直到我找到这对显示线的某个方向。

    但是,角度不正确。在这个阶段,我不明白单位如何与 lubridate 中的时间序列对象一起工作,所以我不知道如何计算 xend 的正确公式。

    任何建议将不胜感激。

    谢谢!!!

    最佳答案

    使用@eipi10 的建议来计算适当的比率并乘以 x 的变化但没有明确设置坐标限制,这里有一个正确显示 45 度风向并且线段长度对应于风速的解决方案。

    date <- seq(ymd('2012-04-07'),ymd('2013-03-22'), by = 'day')
    windspeed <- rnorm(n = length(date), mean = 5, sd = 1)
    dir <- rep((c(0,30,45,60,90)*(pi/180)), times = length(date)/5)

    data <- data.frame(date, windspeed, dir)

    rat <-as.numeric(interval(min(date), max(date))) / (max(windspeed) - min(windspeed))

    data <- data %>%
    mutate(DelY = windspeed * sin(dir)/(2*max(windspeed)),
    DelX = rat * windspeed * cos(dir)/(2*max(windspeed)))



    plt1 <- ggplot(data = data, aes(x = date, y =windspeed))
    plt1 + geom_point(color="blue")+
    geom_segment(aes(x= date, y = windspeed, xend = date + DelX,
    yend=windspeed + DelY),size=.1,color="red") +
    coord_fixed(ratio = rat)

    关于r - ggplot2 段——x 轴为时间时的方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33809675/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com