2015-09-15 46 views
1

我對r和ggplot2都很新穎。我正在嘗試使用下面的代碼創建一個圖表,主要數據集(dat)包含我想要繪製的數據,並且dat中的每個'tp'都被分配了一個唯一的顏色,以便我可以看到與特定的「tp」相關聯。這段代碼運行正常,輸出如預期。使用不同顏色的ggplot繪製多個數據框

#Example 
require(ggplot2) 

#DataFrame 
mytp<-c(80.01,80.01,80.01,80.01,80.01,80.01,80.02,80.02,80.02,80.02,80.02,80.02,80.03,80.03,80.03,80.03,80.03,80.03,80.04,80.04,80.04,80.04,80.04,80.04,83.01,83.01,83.01,83.01,83.01,83.01,83.02,83.02,83.02,83.02,83.02,83.02,83.03,83.03,83.03,83.03,83.03,83.03,83.04,83.04,83.04,83.04,83.04,83.04) 
mycompid<-c(4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4) 
mytml<-c(80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,80,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83,83) 
myyears<-c(7.33470226,23.50171116,20.25188227,15.8329911,26.58726899,11.00068446,7.33470226,26.58726899,23.50171116,11.00068446,20.25188227,15.8329911,7.33470226,11.00068446,26.58726899,23.50171116,15.8329911,20.25188227,7.33470226,11.00068446,15.8329911,20.25188227,26.58726899,23.50171116,7.33470226,11.00068446,15.8329911,20.25188227,23.50171116,26.58726899,7.33470226,11.00068446,15.8329911,20.25188227,23.50171116,26.58726899,7.33470226,11.00068446,15.8329911,20.25188227,23.50171116,26.58726899,7.33470226,11.00068446,15.8329911,20.25188227,23.50171116,26.58726899) 
mythick<-c(0.29,0.28,0.28,0.28,0.28,0.28,0.29,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.28,0.27,0.27,0.27,0.27,0.27,0.27,0.28,0.27,0.27,0.27,0.27,0.27,0.28,0.28,0.28,0.28,0.28,0.28,0.3,0.29,0.29,0.28,0.28,0.28,0.3,0.28,0.28,0.27,0.27,0.27) 
mycomp<-c("6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE") 
myDate<-c("1994-10-01","2010-12-01","2007-08-31","2003-03-31","2013-12-31","1998-05-31","1994-10-01","2013-12-31","2010-12-01","1998-05-31","2007-08-31","2003-03-31","1994-10-01","1998-05-31","2013-12-31","2010-12-01","2003-03-31","2007-08-31","1994-10-01","1998-05-31","2003-03-31","2007-08-31","2013-12-31","2010-12-01","1994-10-01","1998-05-31","2003-03-31","2007-08-31","2010-12-01","2013-12-31","1994-10-01","1998-05-31","2003-03-31","2007-08-31","2010-12-01","2013-12-31","1994-10-01","1998-05-31","2003-03-31","2007-08-31","2010-12-01","2013-12-31","1994-10-01","1998-05-31","2003-03-31","2007-08-31","2010-12-01","2013-12-31") 
mytpcolor<-c("gray53","gray53","gray53","gray53","gray53","gray53","lightyellow4","lightyellow4","lightyellow4","lightyellow4","lightyellow4","lightyellow4","salmon2","salmon2","salmon2","salmon2","salmon2","salmon2","pink","pink","pink","pink","pink","pink","gray52","gray52","gray52","gray52","gray52","gray52","mistyrose1","mistyrose1","mistyrose1","mistyrose1","mistyrose1","mistyrose1","dodgerblue","dodgerblue","dodgerblue","dodgerblue","dodgerblue","dodgerblue","violetred1","violetred1","violetred1","violetred1","violetred1","violetred1") 

#Primary Data for Plot 
dat<-data.frame(tp=mytp, compid=mycompid,  tml=mytml,years=myyears,thick=mythick,comp=mycomp,Date=myDate,tpcolor=mytpcolor) 
dat$Date=as.Date(dat$Date) 

ldatcompid<-c(4,4,4,4,4,4,4,4,4) 
ldatnps<-c(6,6,6,6,6,6,6,6,6) 
ldatcomp<-c("PIPE","PIPE","PIPE","PIPE","PIPE","PIPE","PIPE","PIPE","PIPE") 
ldatcase<-c("data","data","data","data","data","data","data","data","data") 
ldatyear<-c(0,2.5,7.33,11,15.83,19.83,20.25,23.5,26.59) 
ldatMean<-c(0.2849,0.2843,0.2831,0.2822,0.2807,0.2798,0.2797,0.2788,0.2778) 
ldatDate<-c("1987-06-01","1989-11-30","1994-09-29","1998-05-31","2003-03-30","2007-03-30","2007-08-31","2010-11-30","2014-01-01") 
ldatsizecomp<-c("6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE","6PIPE") 

#Additional Data in separate Date Set 
ldat<-data.frame(compid=ldatcompid, nps=ldatnps,  comp=ldatcomp,case=ldatcase,year=ldatyear, Mean=ldatMean,Date=ldatDate,sizecomp=ldatsizecomp) 
ldat$Date=as.Date(ldat$Date) 

ggplot(data=dat,aes(x=as.Date(Date),y=thick, group=tpcolor,color=tpcolor)) + geom_point(shape=18,size=3,position = position_jitter(w = 50, h = 0)) + # Plot Main Data 
gtitle(paste0("MyCircuit","_","MyComponent","(",dat$compid,")")) + #Plot Title 
theme_bw() + theme(plot.title= element_text(size=16, face="bold")) + 
labs(x="Survey Dates and Beyond",y="Thickness(in Inches)") + #Axis labels 

***#MeanLine of 2nd Set Of Data --- WHEN LINE 39 (geom_smooth) or LINE 40 (geom_line) below are UNCOMMENTED, the PLOT NO LONGER RECOGNIZES tpcolor used in line 31 (ggplot2) above. Instead I receive an error Message: Error in eval(expr, envir, enclos) : object 'tpcolor' not found --WHY? 
#geom_smooth(data=ldat, aes(x=Date, y=Mean), method='lm',se=FALSE, fullrange=TRUE, colour="black", linetype="dotdash", size=0.25) + 
#geom_line(data=ldat, aes(x=Date, y=Mean), colour="black", linetype="dotdash", size=0.25) +*** 

scale_colour_discrete(name ="Test Points", 
        breaks=dat$tpcolor, 
        labels=dat$tp) 

當我嘗試使用第二個數據框ldat中的數據添加到我的圖中時,出現了我的問題。上面的代碼包含後面的行,但它被註釋掉了。

geom_smooth(data=ldat, aes(x=Date, y=Mean), method='lm',se=FALSE, fullrange=TRUE, colour="black", linetype="dotdash", size=0.25) + 

當此代碼行是註釋掉,我得到一個錯誤:

Error in eval(expr, envir, enclos) : object 'tpcolor' not found*

而且我不明白爲什麼。我嘗試使用geom_line來代替,但這似乎也不起作用。我曾嘗試將它放在代碼中的不同位置,但沒有任何效果。

如果我從最初的繪圖(ggplot2唯美)中刪除, group=tpcolor,color=tpcolor,該錯誤消失,但我失去了我期待分配的顏色。如果我明確指定的顏色使用DAT $ tpcolor的GGPLOT2美學,我得到一個不同的錯誤:

Error: Aesthetics must either be length one, or the same length as the dataProblems:Date, Mean

在這裏,我以爲我只是增加從最初繪製單獨相同的日期範圍,以我的陰謀中的另一層數據 - 但這似乎意味着分配給主要數據集的顏色正在應用於第二個數據集,我不想這麼做。

我不確定接下來要做什麼。任何想法可能會幫助我使用原始dat數據框中每個tp的指定顏色將兩組數據放到同一個圖上?

回答

2

當你給ggplot打電話時,下面所有的geoms都會得到你給出的初始aes。這導致您的geom_smooth電話​​尋找tpcolor,所以它知道如何爲組着色,而不是找到它,因此你的錯誤。

要解決,你可以嘗試使用DAT中的每個單獨GEOM:

ggplot() + geom_point(data = dat, aes(x = as.Date(Date), y = thick, group = tpcolor, color = tpcolor), shape = 18, size = 3, position = position_jitter(w = 50, h = 0)) + 
      geom_smooth(data = ldat, aes(x = Date, y = Mean), method = 'lm', se = FALSE, fullrange = TRUE, colour = "black", linetype = "dotdash", size = 0.25) 

,或者你可以添加inherit.aes=FALSE到您的通話geom_smooth,以確保它不會繼承以前aes

ggplot(data = dat, aes(x = as.Date(Date), y = thick, group = tpcolor, color = tpcolor)) + 
     geom_point(shape = 18, size = 3, position = position_jitter(w = 50, h = 0)) + 
     geom_smooth(data = ldat, aes(x = Date, y = Mean), method = 'lm', se = FALSE, fullrange = TRUE, colour = "black", linetype = "dotdash", size = 0.25, inherit.aes = FALSE) 
+0

...第三種方法是通過指定'color = NULL'來顯式地「解除」問題圖層中的顏色。 – joran

+0

謝謝你們兩位。完美工作。感謝幫助。 –

相關問題