请考虑以下事项:
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的温度?
答案 0 :(得分: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 via实现相同的绘图:
require(lattice)
xyplot(Temp ~ Doy | Loc, data = Final, type = c("l","p")
后者产生
仅使用type = "p"
获得积分,type = "l"
仅用于积分。正如您所看到的,更高级别的包使得生成这些图比使用基本图形包更容易。
答案 1 :(得分: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()