2012-06-13 24 views
1

考慮以下幾點:從數據幀繪製與2個固定變量

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

對於您想在一個窗口中顯示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) 

將會產生這樣的情節:

england wales temperatures

如果你希望他們都以相同的規模,然後我們修改了一點:

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) 

產生這個版本的劇情

england wales temp with same scaling

對於線圖,您需要獲取Doy訂單中的數據,然後將type = "l"添加到plot()調用中。

爲了完整性,@Justin展示瞭如何使用其中一個高級繪圖軟件包來實現類似的功能,但通過ggplot2來減少用戶的工作量。該包是另一個重要的高級別繪圖包R.您可以通過使用點陣達到相同的情節:

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

後者產生

england wales temp v3 via lattice

使用type = "p"只是點和type = "l"只是線路。正如您所看到的,更高級別的軟件包使這些繪圖比使用基本圖形軟件包更容易一些。

+0

有我顯示的格代碼,但除非您熟悉它,否則您會遇到與ggplot2 * *。對於基本圖形,不;您有責任編寫生成單個繪圖所需的所有代碼。我想你可以寫一個循環,但這將涉及到兩次調用繪圖的代碼寫入。 –

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() 
+0

這兩個工作很好,我不熟悉使用ggplot雖然,有沒有辦法從劇情中刪除灰色背景? – user1407388

+0

在'ggplot(....)'行的末尾添加'+ theme_bw()' –