在R中绘制多个不同日历日期的地块

时间:2015-10-06 18:42:16

标签: r date plot ggplot2

我在一个时间序列中有大约20年的每日数据。它有列日期,降雨量和其他数据。 我正在尝试将雨量与时间相比。我希望获得20个不同颜色的线条图,并生成图例,在一个图表中显示年份。我尝试了以下代码,但它没有给我想要的结果。任何解决我的问题的建议都会受到欢迎

library(ggplot2)
library(seas)
data(mscdata)
p<-ggplot(data=mscdata,aes(x=date,y=precip,group=year,color=year))
p+geom_line()+scale_x_date(labels=date_format("%m"),breaks=date_breaks("1 months"))

3 个答案:

答案 0 :(得分:0)

它看起来不太好,但这是一种方法。我们首先将数据强制转换为同年的日期:

mscdata$dayofyear <- as.Date(format(mscdata$date, "%j"), format = "%j")

然后我们绘制:

library(ggplot2)
library(scales)
p <- ggplot(data = mscdata, aes(x = dayofyear, y = precip, group = year, color = year))
p + geom_line() +
    scale_x_date(labels = date_format("%m"), breaks = date_breaks("1 months"))

enter image description here

答案 1 :(得分:0)

虽然我同意@Jaap认为这可能不是描述这些数据的最佳方式,但请尝试以下方法:

mscdata$doy <- as.numeric(strftime(mscdata$date, format="%j"))

ggplot(data=mscdata,aes(x=doy,y=precip,group=year)) + 
 geom_line(aes(color=year))

enter image description here

答案 2 :(得分:0)

虽然给出的答案是对你的问题的良好答案,但我认为它不会解决你的问题。我认为您应该以不同的方式来呈现数据。 @Jaap已经建议使用facets。以这种方法为例:

#first add a month column to your dataframe
mscdata$month <- format(mscdata$date, "%m")

#then plot it using boxplot with year on the X-axis and month as facet.
p1 <- ggplot(data = mscdata, aes(x = year, y = precip, group=year))
p1 + geom_boxplot(outlier.shape = 3) + facet_wrap(~month)

这将为您提供每月图表,显示每年的降雨量。因为我使用箱形图,降雨中的峰值显示为点(“正常”降雨事件在箱内)。 enter image description here

另一种可能的方法是使用stat_summary