使用ggplot2和faceting将每年绘制为单独的系列

时间:2013-02-09 22:39:54

标签: r ggplot2

我有从2001年到2009年的九条河流的数据。我想创建九个方面的图表,每个方面我想要每年有九条河流。 x轴将是从1月到12月。到目前为止,我已经达成了这个目标:

我使用的代码如下:

testseries<- read.csv("testseries.csv")
meltedtestseries <- melt(testseries,id=c("date"))
head(meltedtestseries)
ggplot(meltedtestseries,aes(x=date,y=value))+geom_line()+facet_wrap(~variable,scales="free")+xlab("Date")+ylab("Discharge(cms)")

我获得的图表如下: enter image description here

现在,我想在几个月内更改X轴,并为每个方面绘制每年九条曲线。我知道我需要改变颜色=年或类似的东西。但它没有成功。任何帮助都非常感谢。谢谢。

可以在https://www.dropbox.com/s/ykhu8vc9211xtzu/testseries.csv

上找到数据集

Jdbaba

修改:额外信息

我也试过这段代码:

ggplot(meltedtestseries,aes(x=as.Date(date),y=value,color=date))+geom_line()+facet_wrap(~variable,scales="free")+xlab("Date")+ylab("Discharge(cms)")

1 个答案:

答案 0 :(得分:4)

我认为你所缺少的是year的分组。假设您的data.framedf

require(ggplot2)
require(reshape2)
df1 <- read.csv("~/Downloads/testseries.csv")
df <- melt(df1,id=c("date"))
df$date <- as.Date(df$date)

# get `year` first
# df$year <- as.POSIXlt(df$date)$year + 1900 (old code)
# df$year <- format(df$date,'%Y') # following @agstudy's comment.
p <- ggplot(data = df, aes(x=date, y=value))
# group/colour by year
p <- p + geom_line(aes(colour=factor(year))) 
p <- p + scale_colour_brewer(palette="Set3") 
p <- p + facet_wrap(~ variable, scales="free", ncol=3)
p <- p + xlab("Date") + ylab("Discharge(cms)")
p

这给出了:

ggplot2_facet

编辑2:如果这不是您要查找的内容,那么您可能需要使用facet_grid对2个变量进行分面,如下所示:

df$year <- factor(as.POSIXlt(df$date)$year + 1900)
p <- ggplot(data = df, aes(x=date, y=value))
p <- p + geom_line() 
p <- p + facet_grid(variable ~ year)
p <- p + xlab("Date") + ylab("Discharge(cms)")
p

给出一个密集的图表:

ggplot2_facet_grid_dense