1

考虑以下:

set.seed(1)
RandData <- rnorm(100,sd=20)
Locations <- rep(c('England','Wales'),each=50)
today <- Sys.Date()
dseq <- (seq(today, by = "1 days", length = 100))

Date <- as.POSIXct(dseq, format = "%Y-%m-%d")

Final <- cbind(Loc = Locations, Doy = as.numeric(format(Date,format = "%j")), Temp = RandData)

在此示例中,如何在同一个图形窗口中生成两个图,其中第一个图显示英格兰相对于 Doy 的温度,第二个显示威尔士相对于 Doy 的温度?

4

2 回答 2

1

请注意,您的数据是字符矩阵。Final如果对象是通过以下方式创建的,则更好:

Final <- data.frame(Loc = Locations,
                    Doy = as.numeric(format(Date,format = "%j")),
                    Temp = RandData)

这样,下面的代码在一个窗口上并排绘制了两个图。我使用公式接口来plot()利用它的subset参数,它的工作原理类似于subset()函数。

ylab <- "Temperature"
xlab <- "Day of year"

layout(matrix(1:2, ncol = 2))
plot(Temp ~ Doy, data = Final, subset = Loc == "England", main = "England",
     ylab = ylab, xlab = xlab)
plot(Temp ~ Doy, data = Final, subset = Loc == "Wales", main = "Wales",
     ylab = ylab, xlab = xlab)
layout(1)

这产生了这个情节:

英格兰威尔士气温

如果您希望它们具有相同的比例,那么我们对其进行一些修改:

ylab <- "Temperature"
xlab <- "Day of year"
xlim <- with(Final, range(Doy))
ylim <- with(Final, range(Temp))
layout(matrix(1:2, ncol = 2))
plot(Temp ~ Doy, data = Final, subset = Loc == "England", main = "England",
     ylab = ylab, xlab = xlab, xlim = xlim, ylim = ylim)
plot(Temp ~ Doy, data = Final, subset = Loc == "Wales", main = "Wales",
     ylab = ylab, xlab = xlab, xlim = xlim, ylim = ylim)
layout(1)

它产生了这个版本的情节

具有相同缩放比例的英格兰威尔士温度

对于线图,您需要按Doy顺序获取数据,然后添加type = "l"plot()调用中。

为了完整起见,@Justin 展示了如何使用高级绘图包之一来实现类似但通过ggplot2减少用户工作量。lattice包是 R 中另一个主要的高级绘图包。您可以使用 lattice 通过以下方式实现相同的绘图:

require(lattice)
xyplot(Temp ~ Doy | Loc, data = Final, type = c("l","p")

后者产生

通过格子的英格兰威尔士温度v3

仅用于type = "p"点和type = "l"仅用于线。如您所见,与使用基本图形包相比,更高级别的包使生成这些图更容易一些。

于 2012-06-13T18:29:48.423 回答
0

通过使用 cbind 创建您的数据,它们都被强制转换为character. 改为使用data.frame()

Final <- data.frame(Loc = Locations, 
                    Doy = as.numeric(format(Date,format = "%j")), 
                    Temp = RandData)

ggplot做这样的事情非常好。

library(ggplot2)
ggplot(Final, aes(x=Doy, y=Temp)) + geom_path() + facet_wrap( ~ Loc)

或者你可以使用着色:

ggplot(Final, aes(x=Doy, y=Temp, color=Loc)) + geom_path()
于 2012-06-13T18:29:03.837 回答