2012-04-14 11 views
11

私はggplot2本の86ページにあるHadley Wickhamの例を複製しようとしています。失業の傾向。ここに私のコアコードは、いくつかのサンプルデータと、次のとおりです。geom_rect失敗:eval(expr、envir、enclos)のエラー:オブジェクト 'variable'が見つかりません

library("ggplot2") 
library("reshape2") 
library("lubridate") 

con <- textConnection("Date,Var1,Var2 
8-Jan-12,100.8,116 
15-Jan-12,99.4,115.5 
22-Jan-12,98.4,115 
28-Jan-12,97.1,114 
4-Feb-12,95.9,112 
11-Feb-12,95.3,113 
18-Feb-12,93.9,111.5 
25-Feb-12,93.5,111.5 
3-Mar-12,92.6,110 
10-Mar-12,91.4,108 
17-Mar-12,90.2,106.8 
24-Mar-12,90,107.5 
31-Mar-12,89.9,106 
5-Apr-12,90.4,106.5 
12-Apr-12,89.8,106") 

track <- read.csv(con, header=TRUE) 
track$Date <- as.Date(dmy(track$Date)) 

track <- melt(track, 
      id.vars = c("Date")) 

con <- textConnection("City,From,To 
Auckland,5-Apr-12,10-Apr-12 
Brussels,1-Apr-12,3-Apr-12 
Cleveland,24-Jan-12,26-Jan-12 
Darjeeling,18-Jan-12,19-Jan-12 
Erehwon,8-Feb-12,10-Feb-12 
Florence,5-Mar-12,7-Mar-12 
Gandalf,25-Mar-12,27-Mar-12") 

trips <- read.csv(con, header=TRUE) 
trips$From <- as.Date(dmy(trips$From)) 
trips$To <- as.Date(dmy(trips$To)) 

# draw the Time Series data 
p <- ggplot(track, 
      aes(x = Date, 
       y = value, 
       colour=variable, 
       group = variable)) 
p <- p + geom_smooth() 
p <- p + geom_point(size=3) 
p <- p + geom_vline(data=trips, 
        aes(xintercept=From), 
        colour='steelblue') # departure dates 
p <- p + geom_vline(data=trips, 
        aes(xintercept=To), 
        colour='grey80') # return dates 
yrng <- c(80,120) 
p <- p + scale_y_continuous(limits=yrng) 

p # this works up to here, using vlines (ugly, but makes the point) 

# ----------- THIS geom_rect() STOPS THIS PLOT BEING RENDERED 
p2 <- p + geom_rect(aes(NULL, NULL, xmin=From, xmax=To), 
        ymin=yrng[1], ymax=yrng[2], 
        data=trips) 

p2 # this gives an error message 
# Error in eval(expr, envir, enclos) : object 'variable' not found 

# ----------- THIS NOW WORKS, THANKS TO @smu, SEE BELOW 
p2 <- p + geom_rect(aes(NULL, NULL, xmin=From, xmax=To, 
        colour=NULL, group=NULL), 
        ymin=yrng[1], ymax=yrng[2], 
       fill='orange', 
       alpha=0.4, 
       data=trips) 
p2 # and I have added fill and alpha to prettify it a bit 

@のタイラー・rinkerによって示唆されるように、私は元のエラーが含まれるようにコードを編集した、溶液を@smuによって指摘しました。ありがとう。

答えて

7

最初のggplotコールでは、colourを「変数」にマップします。このマッピングはまだgeom_rect呼び出しに存在しますが、 'trips'に 'variable'という名前の変数は存在しません。

p2 <- p + geom_rect(aes(NULL, NULL, xmin=From, xmax=To, colour=NULL), 
       ymin=yrng[1], ymax=yrng[2], 
       data=trips) 

(試したことはありませんが、うまくいくはずです)次のように色をマップ解除することをお勧めします。

+1

@gaudenあなたの編集と修正を投稿することができます完全性のための元のポスト? –

10

それはあなたがあなたの前のグラフ(伝説など)に行われた設定を変更しませんようちょうどあなたのgeom_rectinherit.aes=FALSEを追加すると、実際に良い作品

+0

これは良い答えです。 – brittenb

関連する問題