我的数据集图有些麻烦。 这是我的数据集的摘录。
Date Month Year Value 1
30/05/96 May 1996 1835
06/12/96 December 1996 1770
18/03/97 March 1997 1640
27/06/97 June 1997 1379
30/09/97 September 1997 1195
24/11/97 November 1997 1335
13/03/98 March 1998 1790
07/05/98 May 1998 349
14/07/98 July 1998 1179
27/10/98 October 1998 665
我想要做的是每年对着山(x)的价值1(y)的情节。换句话说,一个有3行的图表显示了不同年份每个月值1的变化。
我执行以下操作:
plot(x[Year==1996,4], xaxt="n")
par(new=T)
plot(x[Year==1997,4], xaxt="n")
axis(1, at=1:length(x$Month), labels=x$Month)
问题是1996年的第一个值是指may,而1997年的第一个值是指3月。因此,绘制的值是混合的,不再与它们的月份相对应。 有没有办法在同一个图中绘制所有这些值,保持数据的原始对应关系?
答案 0 :(得分:3)
df <- read.table(text="Date Month Year Value1
30/05/96 May 1996 1835
06/12/96 December 1996 1770
18/03/97 March 1997 1640
27/06/97 June 1997 1379
30/09/97 September 1997 1195
24/11/97 November 1997 1335
13/03/98 March 1998 1790
07/05/98 May 1998 349
14/07/98 July 1998 1179
27/10/98 October 1998 665", header=T, as.is=T)
df$Month <- factor(df$Month, levels=month.name, ordered=T)
library(ggplot2)
ggplot(df) + geom_line(aes(Month, Value1, group=Year)) +
facet_grid(Year~.)
答案 1 :(得分:2)
为您的月份创建数值:
x$MonthNum <- sapply(x$Month, function(x) which(x==month.name))
然后使用这些数值进行绘图,但用单词标记轴。
plot(NA, xaxt="n", xlab="Month", xlim=c(0,13),
ylim=c(.96*min(x$Value),1.04*max(x$Value)), type="l")
z <- sapply(1996:1998, function(y) with(x[x$Year==y,], lines(MonthNum, Value1)))
axis(1, at=1:12, labels=month.name)
还有一些标签,如果你想确定年份:
xlabpos <- tapply(x$MonthNum, x$Year, max)
ylabpos <- mapply(function(mon, year) x$Value1[x$MonthNum==mon & x$Year==year],
xlabpos, dimnames(xlabpos)[[1]])
text(x=xlabpos+.5, y=ylabpos, labels=dimnames(xlabpos)[[1]])
还可以使用layout
获得与ggplot示例类似的内容:
par(mar=c(2,4,1,1))
layout(matrix(1:3))
z <- sapply(1996:1998, function(y) {
with(x[x$Year==y,], plot(Value1 ~ MonthNum, xaxt="n", xlab="Month", ylab=y,
xlim=c(0,13), ylim=c(.96*min(x$Value),1.04*max(x$Value)), type="l"))
axis(1, at=1:12, labels=month.name)
})
答案 2 :(得分:2)
使用@Michele df的lattice
替代方案。我在这里展示了2个替代方案(有和没有分面)
library(lattice)
library(gridExtra)
p1 <- xyplot(Value1~Month,groups=Year,data=df,
type=c('p','l'),auto.key=list(columns=3,lines=TRUE))
p2 <- xyplot(Value1~Month|Year,groups=Year,data=df,layout= c(1,3),
type=c('p','l'),auto.key=list(columns=3,lines=TRUE))
grid.arrange(p1,p2)