1

我的数据集的图有一些问题。这是我的数据集的摘录。

   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

我想做的是一个每年都有值 1(y)对安装(x)的图。换句话说,一个带有 3 条线的图,显示不同年份中每个月 Value 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 的第一个值是指 March。因此,绘制的值是混合的,不再对应于它们的月份。有没有办法在同一张图中绘制所有这些值,保持数据的原始对应关系?

4

3 回答 3

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~.)

在此处输入图像描述

于 2013-06-28T12:50:41.910 回答
2

lattice以及使用@Michele df的替代方法。我在这里展示了 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)

在此处输入图像描述

于 2013-06-28T13:15:58.910 回答
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]])

单图,多线

也可以使用以下方法获得类似于 ggplot 示例的内容layout

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)
})

多个地块

于 2013-06-28T12:23:07.063 回答