R ggplot2绘制小时数据 [英] R ggplot2 plotting hourly data

查看:162
本文介绍了R ggplot2绘制小时数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图用ggplot2来绘制来自气象站的每小时气象数据(这是我第一次使用ggplot)。我已设法绘制日常数据,但在缩减到小时数据时遇到了一些问题。数据文件如下所示:

  FECHA H_SOLAR; DIR_M; VEL_M; TEMP_M; HR; PRECIP 
01/06 / 14 00:50:00; 314.3; 1.9; 14.1; 68.0; -99.9
01/06/14 01:50:00; 322.0; 1.6; 13.3; 68.9; -99.9
01/06 / 14 02:50:00; 303.5; 2.1; 12.3; 70.9; -99.9
01/06/14 03:50:00; 302.4; 1.6; 11.6; 73.1; -99.9
01/06 / 14 04:50:00; 306.5; 1.2; 10.9; 76.4; -99.9
01/06/14 05:50:00; 317.1; 0.8; 12.6; 71.5; -99.9
01/06 / 14 06:50:00; 341.8; 0.0; 17.1; 58.8; -99.9
01/06/14 07:50:00; 264.6; 1.2; 21.8; 44.9; -99.9
01/06 / 14 08:50:00; 253.8; 2.9; 24.7; 32.2; -99.9
01/06/14 09:50:00; 254.6; 3.7; 26.7; 27.7; -99.9
01/06 / 14 10:50:00; 250.7; 4.3; 28.3; 24.9; -99.9
01/06/14 11:50:00; 248.5; 5.3; 29.1; 22.6; -99.9
01/06 / 14 12:50:00; 242.8; 4.7; 30.3; 20.4; -99.9
01/06/14 13:50:00; 260.7; 4.9; 31.3; 17.4; -99.9
01/06 / 14 14:50:00; 251.8; 5.1; 31.9; 17.1; -99.9
01/06/14 15:50:00; 258.1; 4.6; 32.4; 15.3; -99.9
01/06 / 14 16:50:00; 254.3; 5.7; 32.4; 14.0; -99.9
01/06/14 17:50:00; 252.5; 4.6; 32.0; 14.1; -99.9
01/06 / 14 18:50:0 0; 257.4; 3.8; 31.1; 14.9; -99.9
01/06/14 19:50:00; 135.8; 4.2; 26.0; 41.2; -99.9
01/06/14 20:50: 00; 126.0; 1.7; 23.5; 48.7; -99.9
01/06/14 21:50:00; 302.8; 0.7; 21.6; 53.9; -99.9
01/06/14 22:50: 00; 294.2; 1.1; 19.3; 67.4; -99.9
01/06/14 23:50:00; 308.5; 1.0; 17.5; 72.4; -99.9
pre>

我已经使用这个R命令来绘制数据:

  datos = read.csv(utiel.dat,sep =;,header = T,na.strings = -  99.9)

dia = as.Date(datos [,1 ],%y /%m /%d)#Crearídicedia
veloc = zoo(datos [,c(VEL_M)],dia)

gveloc = ggplot( data = datos,aes(dia,veloc))

gveloc + geom_point(color =blue,cex = 1)+ ylab(Velocidad(km / h))+ xlab )+ opts(title =Velocidad media horaria)+ scale_x_date(limits = as.Date(c(2007-01-01,2007-01-31)),format =%Y-%m - %d)

并且获得了这张每月图表,坐标(即同样的一天,它可以预期)





我怎样才能设法读取日期和时间,以便每个点可以绘制在它自己的x /时间坐标中?我认为这个问题在绘图之前就已经开始了,但是我找不到如何将日期读取为YY / MM / DD H:M:S



预先感谢



解决方案:只需添加代码即可为我工作

  datos $ dia = as.POSIXct(datos [,1],format =%y /%m /%d%H:%M:%S)#读取日期/时间作为POSIXct 

ggplot data = datos,aes(x = dia,y = TEMP_M))+
geom_point(color =red)+
ylab(Temperatura(ºC))+
xlab ('2008/02/01'),as.POSIXct('2008/02/01')+
opts(title =Temperatura media)+
scale_x_datetime(limits = c(as.POSIXct 02')),format =%Y-%m-%d)

别人,谢谢Andrie和G.Grothendieck

解决方案

as.Date 只捕获日期元素。为了捕捉时间,您需要使用 as.POSIXct



重新创建您的数据:

  zz<  -  tempfile()
cat(
FECHA H_SOLAR; DIR_M; VEL_M; TEMP_M; HR; PRECIP
01/06/14 00:50:00; 314.3; 1.9; 14.1; 68.0; -99.9
01/06/14 01:50:00; 322.0; 1.6; 13.3; 68.9; -99.9
01/06/14 02:50:00; 303.5; 2.1; 12.3; 70.9; -99.9
01/06/14 03:50:00; 302.4; 1.6; 11.6; 73.1; -99.9
01/06/14 04:50:00; 306.5; 1.2; 10.9; 76.4; -99.9
01/06/14 05:50:00; 317.1; 0.8; 12.6; 71.5; -99.9
01/06/14 06:50:00; 341.8; 0.0; 17.1; 58.8; -99.9
01/06/14 07:50:00; 264.6; 1.2; 21.8; 44.9; -99.9
01/06/14 08:50:00; 253.8; 2.9; 24.7; 32.2; -99.9
01/06/14 09:50:00; 254.6; 3.7; 26.7; 27.7; -99.9
01/06/14 10:50:00; 250.7; 4.3; 28.3; 24.9; -99.9
01/06/14 11:50:00; 248.5; 5.3; 29.1; 22.6; -99.9
01/06/14 12:50:00; 242.8; 4.7; 30.3; 20.4; -99.9
01/06/14 13:50:00; 260.7; 4.9; 31.3; 17.4; -99.9
01/06/14 14:50:00; 251.8; 5.1; 31.9; 17.1; -99.9
01/06/14 15:50:00; 258.1; 4.6; 32.4; 15.3; -99.9
01/06/14 16:50:00; 254.3; 5.7; 32.4; 14.0; -99.9
01/06/14 17:50:00; 252.5; 4.6; 32.0; 14.1; -99.9
01/06/14 18:50:00; 257.4; 3.8; 31.1; 14.9; -99.9
01/06/14 19:50:00; 135.8; 4.2; 26.0; 41.2; -99.9
01/06/14 20:50:00; 126.0; 1.7; 23.5; 48.7; -99.9
01/06/14 21:50:00; 302.8; 0.7; 21.6; 53.9; -99.9
01/06/14 22:50:00; 294.2; 1.1; 19.3; 67.4; -99.9
01/06/14 23:50:00; 308.5; 1.0; 17.5; 72.4; -99.9
,file = zz )

datos = read.csv(zz,sep =;,header = TRUE,na.strings = - 99.9)

将日期转换为 POSIXct 并打印:

  library(ggplot2)

datos = read.csv(zz,sep =;,header = TRUE,na.strings = - 99.9)

datos $ dia = as.POSIXct(datos [,1],format =%y /%m /%d%H:%M:%S)

ggplot (data = datos,aes(x = dia,y = TEMP_M))+
geom_path(color =red)+
ylab(Temperatura(ºC))+
xlab Fecha)+
opts(title =Temperatura media)


I am trying to plot hourly meteorological data coming from a meteorological station with ggplot2 (it's my first time with ggplot). I've managed to plot daily data but having some problem when downscaling to hourly data. Data files look like that:

FECHA H_SOLAR;DIR_M;VEL_M;TEMP_M;HR;PRECIP
01/06/14 00:50:00;314.3;1.9;14.1;68.0;-99.9
01/06/14 01:50:00;322.0;1.6;13.3;68.9;-99.9
01/06/14 02:50:00;303.5;2.1;12.3;70.9;-99.9
01/06/14 03:50:00;302.4;1.6;11.6;73.1;-99.9
01/06/14 04:50:00;306.5;1.2;10.9;76.4;-99.9
01/06/14 05:50:00;317.1;0.8;12.6;71.5;-99.9
01/06/14 06:50:00;341.8;0.0;17.1;58.8;-99.9
01/06/14 07:50:00;264.6;1.2;21.8;44.9;-99.9
01/06/14 08:50:00;253.8;2.9;24.7;32.2;-99.9
01/06/14 09:50:00;254.6;3.7;26.7;27.7;-99.9
01/06/14 10:50:00;250.7;4.3;28.3;24.9;-99.9
01/06/14 11:50:00;248.5;5.3;29.1;22.6;-99.9
01/06/14 12:50:00;242.8;4.7;30.3;20.4;-99.9
01/06/14 13:50:00;260.7;4.9;31.3;17.4;-99.9
01/06/14 14:50:00;251.8;5.1;31.9;17.1;-99.9
01/06/14 15:50:00;258.1;4.6;32.4;15.3;-99.9
01/06/14 16:50:00;254.3;5.7;32.4;14.0;-99.9
01/06/14 17:50:00;252.5;4.6;32.0;14.1;-99.9
01/06/14 18:50:00;257.4;3.8;31.1;14.9;-99.9
01/06/14 19:50:00;135.8;4.2;26.0;41.2;-99.9
01/06/14 20:50:00;126.0;1.7;23.5;48.7;-99.9
01/06/14 21:50:00;302.8;0.7;21.6;53.9;-99.9
01/06/14 22:50:00;294.2;1.1;19.3;67.4;-99.9
01/06/14 23:50:00;308.5;1.0;17.5;72.4;-99.9

I have used this R commands to plot the data:

datos=read.csv("utiel.dat",sep=";",header=T,na.strings="-99.9")

dia=as.Date(datos[,1],"%y/%m/%d")       # Crear índice dia
veloc=zoo(datos[,c("VEL_M")],dia)       

gveloc=ggplot(data=datos,aes(dia,veloc))

gveloc + geom_point(colour="blue",cex=1) + ylab("Velocidad (km/h)") + xlab("Fecha") + opts(title="Velocidad media horaria") + scale_x_date(limits = as.Date(c("2007-01-01","2007-01-31")),format = "%Y-%m-%d")

and got this monthly graph with all data from a single day in the same x coordinate (i.e. the same day as it could be expected)

How can I manage to read not only the day but the time so each point can be plotted in it's own x/time coordinate? I think the problem starts before plotting but I couldn't find how to read date as YY/MM/DD H:M:S

Thanks in advance

Solution: Just an addition to put the code has worked for me

 datos$dia=as.POSIXct(datos[,1], format="%y/%m/%d %H:%M:%S")  # Read date/time as POSIXct

 ggplot(data=datos,aes(x=dia, y=TEMP_M)) + 
   geom_point(colour="red") + 
   ylab("Temperatura (ºC)") + 
   xlab("Fecha") + 
   opts(title="Temperatura media") + 
   scale_x_datetime(limits=c(as.POSIXct('2008/02/01'), as.POSIXct('2008/02/02')) ,format =  "%Y-%m-%d")

Hope it helps someone else, thanks Andrie and G.Grothendieck

解决方案

as.Date only capture the date element. To capture time, you need to use as.POSIXct:

Recreate your data:

zz <- tempfile()
cat("
FECHA H_SOLAR;DIR_M;VEL_M;TEMP_M;HR;PRECIP
01/06/14 00:50:00;314.3;1.9;14.1;68.0;-99.9
01/06/14 01:50:00;322.0;1.6;13.3;68.9;-99.9
01/06/14 02:50:00;303.5;2.1;12.3;70.9;-99.9
01/06/14 03:50:00;302.4;1.6;11.6;73.1;-99.9
01/06/14 04:50:00;306.5;1.2;10.9;76.4;-99.9
01/06/14 05:50:00;317.1;0.8;12.6;71.5;-99.9
01/06/14 06:50:00;341.8;0.0;17.1;58.8;-99.9
01/06/14 07:50:00;264.6;1.2;21.8;44.9;-99.9
01/06/14 08:50:00;253.8;2.9;24.7;32.2;-99.9
01/06/14 09:50:00;254.6;3.7;26.7;27.7;-99.9
01/06/14 10:50:00;250.7;4.3;28.3;24.9;-99.9
01/06/14 11:50:00;248.5;5.3;29.1;22.6;-99.9
01/06/14 12:50:00;242.8;4.7;30.3;20.4;-99.9
01/06/14 13:50:00;260.7;4.9;31.3;17.4;-99.9
01/06/14 14:50:00;251.8;5.1;31.9;17.1;-99.9
01/06/14 15:50:00;258.1;4.6;32.4;15.3;-99.9
01/06/14 16:50:00;254.3;5.7;32.4;14.0;-99.9
01/06/14 17:50:00;252.5;4.6;32.0;14.1;-99.9
01/06/14 18:50:00;257.4;3.8;31.1;14.9;-99.9
01/06/14 19:50:00;135.8;4.2;26.0;41.2;-99.9
01/06/14 20:50:00;126.0;1.7;23.5;48.7;-99.9
01/06/14 21:50:00;302.8;0.7;21.6;53.9;-99.9
01/06/14 22:50:00;294.2;1.1;19.3;67.4;-99.9
01/06/14 23:50:00;308.5;1.0;17.5;72.4;-99.9
", file=zz)

datos=read.csv(zz, sep=";", header=TRUE, na.strings="-99.9")

Convert dates to POSIXct and print:

library(ggplot2)

datos=read.csv(zz, sep=";", header=TRUE, na.strings="-99.9")

datos$dia=as.POSIXct(datos[,1], format="%y/%m/%d %H:%M:%S")  

ggplot(data=datos,aes(x=dia, y=TEMP_M)) + 
  geom_path(colour="red") + 
  ylab("Temperatura (ºC)") + 
  xlab("Fecha") + 
  opts(title="Temperatura media") 

这篇关于R ggplot2绘制小时数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆