首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图为geom_vline映射一个值,但没有在x轴上用R中的ggplot绘制正确的位置

试图为geom_vline映射一个值,但没有在x轴上用R中的ggplot绘制正确的位置
EN

Stack Overflow用户
提问于 2020-02-28 21:48:53
回答 1查看 506关注 0票数 5

我目前正试图生成NOAA潮汐预报图(x = datetime,y=水位),以黎明/日出/黄昏/日落时间作为沿x轴时间线的垂直线。

rnoaa包调用数据,并在POSIXct中给出预测日期时间。suncalc库也以POSIXct格式为我提供了一个数据框架,其中包括范围内日出、日落等的每个日期。

代码语言:javascript
复制
library(rnoaa)
library(tidyverse)
library(ggplot2)
library(suncalc)
march.tides <- as.data.frame(coops_search(station_name = 8551762, 
                                          begin_date = 20200301, end_date = 20200331, 
                                          datum = "mtl", product = "predictions"))
march.tides <- march.tides %>%
  mutate(yyyy.mm.dd = as.Date(predictions.t))
dates <- unique(march.tides$yyyy.mm.dd)
sunlight.times <- getSunlightTimes(date = seq.Date(as.Date("2020/3/1"), as.Date("2020/3/31"), by = 1), 
                lat = 39.5817, lon = -75.5883, tz = "EST")

然后,我有一个循环,它为每个日历日期分别列出了一些情节--这是非常有用的。垂直线是在图形上绘制没有错误,但肯定是在错误的地方(日出是在上午11点左右,当它应该是06:30)。

代码语言:javascript
复制
for (i in seq_along(dates)) {
  plot <- ggplot(subset(march.tides, march.tides$yyyy.mm.dd==dates[i])) +
    aes(x = predictions.t, y = predictions.v) +
    geom_line(size = 1L, colour = "#0c4c8a") +
    theme_bw() + 
    geom_vline(xintercept = sunlight.times$sunrise) +
    geom_vline(xintercept = sunlight.times$sunset) +
    geom_vline(xintercept = sunlight.times$dawn, linetype="dotted") +
    geom_vline(xintercept = sunlight.times$dusk, linetype="dotted") +
    ggtitle(dates[i])
  print(plot)
}

我也可以用不同的日期来代替这种循环的方法。即使我将数据子集为单个日期,垂直线仍未正确绘制。

我想知道这个问题是不是一个时区的问题。如果我试图将时区参数添加到潮汐预测数据调用中,则会得到以下错误:

代码语言:javascript
复制
Error in if (!repeated && grepl("%[[:xdigit:]]{2}", URL, useBytes = TRUE)) return(URL) : 
  missing value where TRUE/FALSE needed
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-29 19:39:34

看起来,您希望使用EST作为您的时区,因此您可以在predictions.t的转换中包含它。

我将使用ggplot (包括时区)在scale_x_datetime中明确说明您希望在xaxis上标记的内容。

代码语言:javascript
复制
library(rnoaa)
library(tidyverse)
library(ggplot2)
library(suncalc)
library(scales)

march.tides <- as.data.frame(coops_search(station_name = 8551762, 
                                          begin_date = 20200301, end_date = 20200331, 
                                          datum = "mtl", product = "predictions"))

march.tides <- march.tides %>%
  mutate(yyyy.mm.dd = as.Date(predictions.t, tz = "EST"))
dates <- unique(march.tides$yyyy.mm.dd)
sunlight.times <- getSunlightTimes(date = seq.Date(as.Date("2020/3/1"), as.Date("2020/3/31"), by = 1), 
                                   lat = 39.5817, lon = -75.5883, tz = "EST")

for (i in seq_along(dates)) {
  plot <- ggplot(subset(march.tides, march.tides$yyyy.mm.dd==dates[i])) +
    aes(x = predictions.t, y = predictions.v) +
    geom_line(size = 1L, colour = "#0c4c8a") +
    theme_bw() + 
    geom_vline(xintercept = sunlight.times$sunrise) +
    geom_vline(xintercept = sunlight.times$sunset) +
    geom_vline(xintercept = sunlight.times$dawn, linetype="dotted") +
    geom_vline(xintercept = sunlight.times$dusk, linetype="dotted") +
    ggtitle(dates[i]) +
    scale_x_datetime(labels = date_format("%b %d %H:%M", tz = "EST"))
  print(plot)
}

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60459693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档