【问题标题】:Format x-axis date in chr type on facet_wrap using R使用 R 在 facet_wrap 上以 chr 类型格式化 x 轴日期
【发布时间】:2021-04-11 03:38:35
【问题描述】:

*** 更新了代码,使其可重现。 ***

这个问题与使用 RStudio 的 R 相关。

我需要将 x 轴上的日期格式化为三个字母的月份和两位数的日期,如下所示(3 月 1 日)。

日期本身就是一个数据框,如 date.local,它的类型为“chr”,格式为:2021-04-10T20:00:00+02:00

这是我在 R 上使用的代码:

measurements_page <- fromJSON("https://api.openaq.org/v2/measurements?coordinates=41.385063,2.173404&radius=1200&limit=2000#/")
measurements_df <- as_tibble(measurements_page$results)
# Tried as.Date() but I couldn't get it to work 
#as.Date(measurements_df$date$local, format = "%m/%d/%Y" )
measurements_df %>%
  ggplot() +
  geom_line(mapping = aes(
     x = date$local, 
     y = value,
     group = 1
  )) +
  facet_wrap(~ parameter, scales = "free_y")   

它应该是这样的:

但它看起来像这样:

在我看来,日期都以长格式叠加在一起。

我该如何解决这个问题?

我试过这个:

as.Date(measurements_df$date$local, format = "%m/%d/%Y" )

但我得到了所有 NA 的

感谢您的帮助。请,谢谢!

【问题讨论】:

  • 1) date$local 和 value 是独立的数据集?这不是一个好主意。 2)您可以发布示例数据吗?像这样,问题的问题是不可重现的; 3)见scale_x_datetime,论据date_labels = "%b %d"。
  • 更新了代码。 date 是主数据框中的数据框。我希望我能正确解释这一点。
  • @Rui Barradas。谢谢你瑞巴拉达斯。我尝试在数据集上使用来自 lubridate 的ymd(),但没有成功。 date.utc 没有变化。您如何确定 date$lcoal 和 value 是单独的数据集?提前致谢。
  • 要设置数据的结构,请使用str()。你会看到date 是一个变量的data.frame,所以date$local 是要在x 轴上绘制的向量。 (或date$utc)。

标签: r as.date


【解决方案1】:

虽然已经有一个accepted answer,但这里还有一个。
我对这些数据的折线图有一些疑问,请参见下面的散点图。

library(dplyr)
library(ggplot2)

measurements_page <- jsonlite::fromJSON("https://api.openaq.org/v2/measurements?coordinates=41.385063,2.173404&radius=1200&limit=2000#/")

measurements_page %>% 
  magrittr::extract2("results") %>%
  mutate(date_local = as.Date(date$local)) %>%
  ggplot(aes(date_local, value)) +
  #geom_line() +
  geom_point() +
  xlab("Date local") +
  facet_wrap(~ parameter, scales = "free_y")

【讨论】:

    【解决方案2】:

    我刚刚将 x 变量包裹在 aes 周围 as.Date 并且它在我的窗口中工作

    measurements_df %>%
      ggplot() +
      geom_line(mapping = aes(
        x = as.Date(date$local), 
        y = value,
        group = 1
      )) +
      facet_wrap(~ parameter, scales = "free_y")
    

    【讨论】:

    • 谢谢!我知道这很简单,我只是不知道在哪里适合 as.Date()。这对我有用。
    猜你喜欢
    • 1970-01-01
    • 2014-06-06
    • 2014-08-12
    • 2012-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    相关资源
    最近更新 更多