【问题标题】:How to adjust the time on x-axis with ggplot?如何使用ggplot调整x轴上的时间?
【发布时间】:2020-08-31 06:55:23
【问题描述】:

我正在尝试使用 ggplot 绘制(时间 VS 速度和降水),但我得到了一个混乱的情节。数据低于(df),然后是我尝试过的代码。

    df <- structure(list(Agency.Station.ID = c("MI270N003.6D", "MI270N004.7D", 
"MI270N005.7D", "MI270N007.3D", "MI270N008.5D", "MI270N003.6D", 
"MI270N004.7D", "MI270N005.7D", "MI270N007.3D", "MI270N008.5D", 
"MI270N003.6D", "MI270N004.7D", "MI270N005.7D", "MI270N007.3D", 
"MI270N008.5D", "MI270N003.6D", "MI270N004.7D", "MI270N005.7D", 
"MI270N007.3D", "MI270N008.5D"), date_time = structure(c(1427846400, 
1427846400, 1427846400, 1427846400, 1427846400, 1427846700, 1427846700, 
1427846700, 1427846700, 1427846700, 1427847000, 1427847000, 1427847000, 
1427847000, 1427847000, 1427847300, 1427847300, 1427847300, 1427847300, 
1427847300), class = c("POSIXct", "POSIXt"), tzone = "UTC"), 
    Date = structure(c(16526, 16526, 16526, 16526, 16526, 16526, 
    16526, 16526, 16526, 16526, 16526, 16526, 16526, 16526, 16526, 
    16526, 16526, 16526, 16526, 16526), class = "Date"), Time = c("00:00:00", 
    "00:00:00", "00:00:00", "00:00:00", "00:00:00", "00:05:00", 
    "00:05:00", "00:05:00", "00:05:00", "00:05:00", "00:10:00", 
    "00:10:00", "00:10:00", "00:10:00", "00:10:00", "00:15:00", 
    "00:15:00", "00:15:00", "00:15:00", "00:15:00"), Speed = c(59, 
    34, 46, 61, 46, 58, 39, 51, 36, 52, 62, 47, 49, 57, 50, 59, 
    50, 35, 54, 44), Precipitation = c(0, 0, 0, 0, 0, 0, 0, 0, 
    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), row.names = c(NA, 20L
), class = "data.frame")

这是我尝试过的代码:

df <- df %>% gather(Aspect, Value, -Agency.Station.ID, -Date, -Time)
df$Agency.Station.ID <- factor(df$Agency.Station.ID)
df$Date <- factor(df$Date)
for(i in levels(df$Agency.Station.ID)) {
  pdf(paste0(i,'.pdf'))

  for(j in levels(df$Date)) {
    subset.data <- df[which(df$Agency.Station.ID==i & df$Date==j),]
    if (nrow(subset.data)!=0) {
      p <- ggplot(data=subset.data, aes(Time, Value, group = 1)) +
        geom_line(aes(color=Aspect)) +
        labs(title=paste('Station:',i, " Date:",j)) +
        theme_bw()
      invisible(print(p))
    }
  }
  dev.off()
}

我担心的是时间(我每天有 288 次观察),因为它将在 x 轴上压缩。

【问题讨论】:

  • 我们可以将 x 轴上的标签更改为 (1:24) 之间的特定数字,即一天中的小时数吗?
  • 您在这里没有提供完全可重复的示例,所以我无法测试答案,但我会考虑使用 scale_x_datescale_x_datetime 自定义刻度位置和标签地块。

标签: r ggplot2 plot time visualization


【解决方案1】:

除了将Date Time 存储在单独的列中之外,您还可以组合:

df$Datetime <- as.POSIXct(paste0(df$Date, df$Time))

现在ggplot 在 x 轴上打印所有标签,因为Timecharacter 给出。 ggplot 调用函数到 prettify 轴标签,即打印信息丰富的非重叠标签。这需要numeric 变量的变化,例如R 的日期时间表示POSIXct

PS:你的例子不适合我,Aspect 不见了。

【讨论】:

  • 我需要为每个 Agency.Station.ID 绘制 43 个图。然后每个情节将 24 小时分为 5 分钟。在这种情况下,Date.Time 列可能对我不起作用。
  • 在这种情况下,以下可能是解决方法click。一天中的时间以POSIXct 表示,全部为一天。这样您就可以从 ggplot2 中的自动日期处理中受益,并保持列分开。
  • 我已经通过了时间标签问题。但是,如上图所示,情节仍然很混乱。我认为情节的价值不止一天。
  • 我希望这两个图是两条平滑线,如此清晰地显示了两个变量的起伏。
  • 请编辑您的原始问题,并提供一个工作示例。那么这个问题就可以解决了。
猜你喜欢
  • 1970-01-01
  • 2020-07-01
  • 1970-01-01
  • 2019-07-25
  • 1970-01-01
  • 2011-01-25
  • 1970-01-01
  • 2019-12-31
  • 2016-06-11
相关资源
最近更新 更多