【问题标题】:plotting temperature Vs time in R在 R 中绘制温度与时间的关系
【发布时间】:2015-04-17 04:06:27
【问题描述】:

我想将 3 个地方的半小时温度绘制成一张图。这是文件的样子(这是Noble2.csv 的一部分;其他文件是Noble3.csvNoble6.csv):

    Time    Temp
1   08/20/14 02:05:02 PM    17.034
2   08/20/14 02:35:02 PM    16.749
3   08/20/14 03:05:02 PM    16.963
4   08/20/14 03:35:02 PM    16.820
5   08/20/14 04:05:02 PM    16.963
6   08/20/14 04:35:02 PM    17.153
7   08/20/14 05:05:02 PM    16.249
8   08/20/14 05:35:02 PM    15.652
9   08/20/14 06:05:02 PM    14.649
10  08/20/14 06:35:02 PM    13.906
11  08/20/14 07:05:02 PM    13.209
12  08/20/14 07:35:02 PM    12.316
13  08/20/14 08:05:02 PM    12.268
14  08/20/14 08:35:02 PM    12.243
15  08/20/14 09:05:02 PM    12.219
16  08/20/14 09:35:02 PM    12.171
17  08/20/14 10:05:02 PM    12.147
18  08/20/14 10:35:02 PM    12.122
19  08/20/14 11:05:02 PM    12.074 

Noble3.csv:

Time    Temp

1 08/20/14 02:06:59 PM 15.438 2 2014 年 8 月 20 日下午 2:36:59 13.882 3 08/20/14 03:06:59 下午 13.642 4 2014 年 8 月 20 日下午 3:36:59 13.353 5 2014 年 8 月 20 日下午 4:06:59 13.666 2014 年 8 月 20 日下午 4:36:59 12.074 7 08/20/14 05:06:59 下午 12.147 8 08/20/14 05:36:59 下午 12.219 9 08/20/14 06:06:59 下午 12.268 10 08/20/14 06:36:59 下午 12.292 11 08/20/14 07:06:59 下午 12.292 12 08/20/14 07:36:59 下午 12.268 13 08/20/14 08:06:59 下午 12.268 14 年 8 月 20 日下午 8 点 36 分 59 秒 12.243 15 08/20/14 09:06:59 下午 12.219 16 08/20/14 09:36:59 下午 12.171 17 08/20/14 10:06:59 下午 12.147 18 08/20/14 10:36:59 下午 12.122 14 年 8 月 20 日 19 日下午 11:06:59 12.098

还有 Noble6.csv:

Time    Temp

1 08/19/14 04:59:27 PM 12.001 2 2014 年 8 月 19 日下午 5:29:27 12.050 3 08/19/14 05:59:27 下午 12.122 4 08/19/14 06:29:27 下午 12.147 5 2014 年 8 月 19 日下午 6:59:27 12.171 6 08/19/14 07:29:27 下午 12.195 7 08/19/14 07:59:27 下午 12.219 8 08/19/14 08:29:27 下午 12.195 9 08/19/14 08:59:27 下午 12.171 10 08/19/14 09:29:27 下午 12.122 11 08/19/14 09:59:27 下午 12.074 12 08/19/14 10:29:27 下午 12.025 13 08/19/14 10:59:27 下午 11.977 14 年 8 月 19 日 11:29:27 下午 11.929 15 08/19/14 11:59:27 下午 11.880 16 08/20/14 12:29:27 上午 11.832 17 08/20/14 12:59:27 上午 11.783 18 08/20/14 01:29:27 上午 11.734 19 08/20/14 01:59:27 上午 11.662 20 14 年 8 月 20 日上午 2 点 29 分 27 秒 11.613

首先,我尝试使用以下命令将时间列设置为时间格式:

> NB2<-strptime(Noble2$Time, "%m/%d/%y %I:%M:%S %p")  
> NB3<-strptime(Noble3$Time, "%m/%d/%y %I:%M:%S %p")  
> NB6<-strptime(Noble6$Time, "%m/%d/%y %I:%M:%S %p")  

然后我尝试将温度值作为列表以便能够使用函数图:

> NB2T<-Noble2$Temp  
> NB3T<-Noble3$Temp  
> NB6T<-Noble6$Temp  

只是为了检查它的外观(在尝试将 3 条线放在一个图表中之前)我尝试绘制 NB2 Vs NB2T:

plot(NB2,NB2T,type="l",col="red")

这就是我得到的:this - 这毫无意义。我应该得到类似this 的东西(这个是用excel制作的)。

我还没有到将三条线添加到一个图表中的阶段,但是您能否指出我正确的方向以首先获得正确的图表以及如何将其他两条线添加到图表中?

【问题讨论】:

  • 你能展示一下 NB2 和 NB2T 向量的样子吗?
  • 嘿,reproducible example 会有很大帮助。你能dput()你的部分数据吗?我尝试了您数据的前 3 行,该图对我来说看起来不错。

标签: r time plot temperature


【解决方案1】:

试试这个:

Noble2$Time = as.POSIXct(Noble2$Time,format="%m/%d/%y %I:%M:%S %p")
plot(Temp~Time,data=Noble2,type='l',col='red')

您要确保将日期时间转换为 POSIXct 类型,而不是 POSIXlt 类型。

【讨论】:

    【解决方案2】:
    library(ggplot2)
    library(scales) # to access breaks/formatting functions
    ggplot(aes(x = Time, y = Temp), data = Noble2) + geom_line()
    last_plot()+scale_x_datetime(breaks = date_breaks("30 mins"))
    

    如果你想要dynamic 图表,你可以按如下操作:

    library(dygraphs)
    library(xts)
    x1<-read.csv("Noble2.csv",na.strings = c("NA", ""))
    x2<-x1[complete.cases(x1),]
    x2$Time<-strptime(x2$Time, "%m/%d/%y %I:%M:%S %p") 
    #convert to xts object before using dygraph
    x3<- xts(x2[,-1], order.by=x2[,1]) 
    dygraph(x3[1:7625,]) %>% # last two observations still give the NA's (not sure why)
    dyRangeSelector(height = 20)
    

    【讨论】:

    • x 轴上的日期是错误的...转到原始文件并注意到原始文件上的日期是错误的(有些在 m/d/y 中,有些在 d/m/ y)。一旦我先解决了这个问题,我会回来的。非常感谢
    【解决方案3】:

    尝试了数据的前三行,绘图看起来不错。

    也许问题在于解析 CSV 文件?

    NB2 <- structure(list(sec = c(2, 2, 2), min = c(5L, 35L, 5L), hour = c(14L, 
     14L, 15L), mday = c(20L, 20L, 20L), mon = c(7L, 7L, 7L), year = c(114L, 
     114L, 114L), wday = c(3L, 3L, 3L), yday = c(231L, 231L, 231L), 
         isdst = c(1L, 1L, 1L), zone = c("EDT", "EDT", "EDT"), gmtoff = c(NA_integer_, 
         NA_integer_, NA_integer_)), .Names = c("sec", "min", "hour", 
     "mday", "mon", "year", "wday", "yday", "isdst", "zone", "gmtoff"
     ), class = c("POSIXlt", "POSIXt"))
    
    NB2T <- c(17.034, 16.749, 16.963)
    
    plot(NB2, NB2T, type="l")
    

    要将其他系列添加到带有基本图形的绘图中,您可以使用lines,例如:

    plot(NB2, NB2T, type="l")
    lines(NB3, NB3T, color="red")
    

    ggplot2,例如look here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-28
      • 2019-06-09
      • 1970-01-01
      • 2019-07-28
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      相关资源
      最近更新 更多