在 R 中绘制温度 Vs 时间
plotting temperature Vs time in R
我想将 3 个地方的半小时温度绘制到一个图中。这是文件的样子(这是 Noble2.csv
的一部分;其他文件是 Noble3.csv
和 Noble6.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 2014 年 8 月 20 日 02:06:59 下午 15.438
2 14 年 8 月 20 日 02:36:59 下午 13.882
3 2014 年 8 月 20 日 03:06:59 下午 13.642
4 14 年 8 月 20 日 03:36:59 下午 13.353
5 14 年 8 月 20 日 04:06:59 下午 13.666
6 14 年 8 月 20 日 04:36:59 下午 12.074
7 14 年 8 月 20 日 05:06:59 下午 12.147
2014 年 8 月 20 日 05:36:59 下午 12.219
9 14 年 8 月 20 日 06:06:59 下午 12.268
10 年 8 月 20 日 06:36:59 下午 12.292
11 年 8 月 20 日 07:06:59 下午 12.292
12 年 8 月 20 日 07:36:59 下午 12.268
13 年 8 月 20 日 08:06:59 下午 12.268
14 年 8 月 20 日 08:36:59 下午 12.243
15 年 8 月 20 日 09:06:59 下午 12.219
16 年 8 月 20 日 09:36:59 下午 12.171
17 年 8 月 20 日 10:06:59 下午 12.147
18 年 8 月 20 日 10:36:59 下午 12.122
19 年 8 月 20 日 11:06:59 下午 12.098
和Noble6.csv:
Time Temp
1 2014 年 8 月 19 日 04:59:27 下午 12.001
2 2014 年 8 月 19 日 05:29:27 下午 12.050
3 2014 年 8 月 19 日 05:59:27 下午 12.122
4 14 年 8 月 19 日 06:29:27 下午 12.147
5 14 年 8 月 19 日 06:59:27 下午 12.171
6 14 年 8 月 19 日 07:29:27 下午 12.195
7 14 年 8 月 19 日 07:59:27 下午 12.219
2014 年 8 月 19 日 08:29:27 下午 12.195
9 14 年 8 月 19 日 08:59:27 下午 12.171
10 年 8 月 19 日 09:29:27 下午 12.122
11 年 8 月 19 日 09:59:27 下午 12.074
12 年 8 月 19 日 10:29:27 下午 12.025
13 年 8 月 19 日 10:59:27 下午 11.977
14 年 8 月 19 日 11:29:27 下午 11.929
15 年 8 月 19 日 11:59:27 下午 11.880
16 年 8 月 20 日 12:29:27 上午 11.832
17 年 8 月 20 日 12:59:27 上午 11.783
18 年 8 月 20 日 01:29:27 上午 11.734
19 年 8 月 20 日 01:59:27 上午 11.662
2014 年 8 月 20 日 02: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")
然后我尝试将温度值作为列表以便能够使用函数 plot:
> NB2T<-Noble2$Temp
> NB3T<-Noble3$Temp
> NB6T<-Noble6$Temp
只是为了检查它的外观(在尝试将 3 条线放在一张图中之前)我尝试绘制 NB2 与 NB2T:
plot(NB2,NB2T,type="l",col="red")
这是我得到的:this - which makes no sense. I should have gotten something like this(这是 excel 制作的)。
我还没有到将三条线添加到一张图中的阶段,但是你能给我指出正确的方向以首先获得正确的图以及如何将其他两条线添加到图中吗?
试试这个:
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 类型。
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)
尝试了您数据的前三行,绘图看起来不错。
可能是解析 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
我想将 3 个地方的半小时温度绘制到一个图中。这是文件的样子(这是 Noble2.csv
的一部分;其他文件是 Noble3.csv
和 Noble6.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 2014 年 8 月 20 日 02:06:59 下午 15.438 2 14 年 8 月 20 日 02:36:59 下午 13.882 3 2014 年 8 月 20 日 03:06:59 下午 13.642 4 14 年 8 月 20 日 03:36:59 下午 13.353 5 14 年 8 月 20 日 04:06:59 下午 13.666 6 14 年 8 月 20 日 04:36:59 下午 12.074 7 14 年 8 月 20 日 05:06:59 下午 12.147 2014 年 8 月 20 日 05:36:59 下午 12.219 9 14 年 8 月 20 日 06:06:59 下午 12.268 10 年 8 月 20 日 06:36:59 下午 12.292 11 年 8 月 20 日 07:06:59 下午 12.292 12 年 8 月 20 日 07:36:59 下午 12.268 13 年 8 月 20 日 08:06:59 下午 12.268 14 年 8 月 20 日 08:36:59 下午 12.243 15 年 8 月 20 日 09:06:59 下午 12.219 16 年 8 月 20 日 09:36:59 下午 12.171 17 年 8 月 20 日 10:06:59 下午 12.147 18 年 8 月 20 日 10:36:59 下午 12.122 19 年 8 月 20 日 11:06:59 下午 12.098
和Noble6.csv:
Time Temp
1 2014 年 8 月 19 日 04:59:27 下午 12.001 2 2014 年 8 月 19 日 05:29:27 下午 12.050 3 2014 年 8 月 19 日 05:59:27 下午 12.122 4 14 年 8 月 19 日 06:29:27 下午 12.147 5 14 年 8 月 19 日 06:59:27 下午 12.171 6 14 年 8 月 19 日 07:29:27 下午 12.195 7 14 年 8 月 19 日 07:59:27 下午 12.219 2014 年 8 月 19 日 08:29:27 下午 12.195 9 14 年 8 月 19 日 08:59:27 下午 12.171 10 年 8 月 19 日 09:29:27 下午 12.122 11 年 8 月 19 日 09:59:27 下午 12.074 12 年 8 月 19 日 10:29:27 下午 12.025 13 年 8 月 19 日 10:59:27 下午 11.977 14 年 8 月 19 日 11:29:27 下午 11.929 15 年 8 月 19 日 11:59:27 下午 11.880 16 年 8 月 20 日 12:29:27 上午 11.832 17 年 8 月 20 日 12:59:27 上午 11.783 18 年 8 月 20 日 01:29:27 上午 11.734 19 年 8 月 20 日 01:59:27 上午 11.662 2014 年 8 月 20 日 02: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")
然后我尝试将温度值作为列表以便能够使用函数 plot:
> NB2T<-Noble2$Temp
> NB3T<-Noble3$Temp
> NB6T<-Noble6$Temp
只是为了检查它的外观(在尝试将 3 条线放在一张图中之前)我尝试绘制 NB2 与 NB2T:
plot(NB2,NB2T,type="l",col="red")
这是我得到的:this - which makes no sense. I should have gotten something like this(这是 excel 制作的)。
我还没有到将三条线添加到一张图中的阶段,但是你能给我指出正确的方向以首先获得正确的图以及如何将其他两条线添加到图中吗?
试试这个:
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 类型。
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)
尝试了您数据的前三行,绘图看起来不错。
可能是解析 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