ggplot2按年份分面

时间:2013-09-25 10:09:40

标签: r ggplot2

我试图用facet_grid绘制为期八年(2004-2011)系列的月降水量数据,以绘制单个地块中每年的月度值。但是,很多时候,绘图时可能会出现问题(可能是我的错)。你可以看到我从x轴开始的情节从2004年开始,到2011年为每个情节结束,但我需要从每年的1月到12月的情节从1月到12月。我怎样才能摆脱这个错误?

任何帮助将不胜感激。

enter image description here

在这里你可以获得dput(pcp.mensual)http://ubuntuone.com/0EZvmwXGnSkqNVwXZOnx8E的输出,以下是我使用的代码(一段较长的脚本)。

library(ggplot2)
library(plyr)
library(lubridate)
library(scales)

#---------------------------------------------------------------------

system("awk '{ print $1 \";\" $2 \";\" $3 \";\" $5 \";\" $10 \";\" $11 \";\" $13 }' visbel.cor > kk.dat",intern=T)

# Lectura de datos
datos=read.csv("kk.dat",sep=";",header=T,na.strings="-99.900")

# Inclusión de una columna con formato temporal 
# (dato original en formato %y/%m/%d %H:%M:%S)
datos=within(datos, datetime <- as.POSIXct(paste(FECHA,H_SOLAR),format = "%y/%m/%d %H:%M:%S"))

# Creación del objeto datetime
#datetime <- as.POSIXct(paste(datos$FECHA,datos$H_SOLAR),format = "%y/%m/%d %H:%M:%S")

# Eliminación de valores NA en Precipitación para barplot
datos$Precipitacion[is.na(datos$Precipitacion)]=0

#---------------------------------------------------------------------

pcp.diaria=aggregate(cbind(Precip.diaria=Precipitacion) ~ FECHA, datos, sum)
pcp.diaria=within(pcp.diaria, date <- as.POSIXct(paste(pcp.diaria$FECHA),format = "%y/%m/%d"))

# Agregación mensual
pcp.diaria$mes <- floor_date(pcp.diaria$date, "month")
pcp.mensual=ddply(pcp.diaria, "mes", summarise, x = sum(Precip.diaria,na.rm=TRUE))
pcp.mensual$ano=year(pcp.mensual$mes)
colnames(pcp.mensual) <- c("mes", "Precip.mensual","ano")

#---------------------------------------------------------------------                            

ggplot(data=pcp.mensual,aes(x=mes, y=Precip.mensual)) +
  facet_grid(ano ~. ) +
  geom_bar(colour="blue",stat="identity",fill="blue") + 

1 个答案:

答案 0 :(得分:4)

您可以使用months()函数从POSIXct对象中提取月份信息。您可以将其设为x而不是mes。要按照您的意愿订购月份,而不是按字母顺序排列,您可以制作一个有序因子:

pcp.mensual$month <- months(pcp.mensual$mes)
pcp.mensual$month <- factor(pcp.mensual$month, levels = unique(pcp.mensual$month))
ggplot(data=pcp.mensual,aes(x=pcp.mensual$month, y=Precip.mensual)) +
  facet_grid(ano ~. ) +
  geom_bar(colour="blue",stat="identity",fill="blue")

enter image description here