2013-03-19 125 views
1

我是ggplot2的新手,我有一個問題,我無法找到答案。 我創建了以下數據的玩具中的解釋,以幫助:使用geom_bar不同填充不同facet_grids

data <- data.frame(tech=c(rep(letters[1:15],2)), 
    sep=c(rep(c("SitutationA", "SitutationB"),each=15)), 
    error=c(runif(15,min=-0.2, max=0.5), runif(15, min=0.3, max=1))) 

我想繪製出每個技術的「高科技」的「錯誤」(Y軸)一geom_bar圖(X軸)的劃分使用facet_grid兩種不同的情況(情境A和情境B)。每個條的顏色(fill)應代表每種技術的「錯誤」,而不是技術(作爲因素)。情況A和B的錯誤以不同的尺度衡量。但是,在我的代碼中,在兩種情況下,相同值的錯誤都具有相同的顏色。我不想要這種行爲,因爲它們是以不同的尺度衡量的。因此,我希望情況A和B的顏色是獨立的。

以下代碼繪製圖表,但在兩種情況下使用相同的顏色。

ggplot(data, aes(x=tech, y=error)) + 
    geom_bar(aes(fill=error), stat="identity", position="dodge") + 
    facet_grid(sep ~ ., scales="free_y") + 
    scale_fill_continuous(guide=FALSE) 

我怎樣才能使用不同的連續填充每個方面(情況A和情況B)?

謝謝。

回答

1

在同一圖上不能有兩個不同的填充比例。

解決此問題的方法可能是製作兩張圖,然後將它們與來自庫gridExtragrid.arrange()放在一起。

在第一個圖中只放入了SitutationA的值。將y縮放比例更改爲在小數點後顯示兩個數字的值(與第二個圖相同)。刪除x軸標題,文本和刻度並更改了繪圖邊距 - 將底部邊距設置爲-0.4以減少繪圖之間的間距。

library(grid) 
library(gridExtra) 
p1<-ggplot(subset(data,sep=="SitutationA"), aes(x=tech, y=error)) + 
    geom_bar(aes(fill=error), stat="identity", position="dodge") + 
    facet_grid(sep ~ ., scales="free_y") + 
    scale_fill_continuous(guide=FALSE)+ 
    scale_y_continuous(breaks=c(0,0.25,0.50))+ 
    theme(axis.text.x=element_blank(), 
     axis.title.x=element_blank(), 
     axis.ticks.x=element_blank(), 
     plot.margin=unit(c(1,1,-0.4,1),"lines")) 

對於第二曲線(SitutationB)改變頂情節餘量-0.4減少曲線之間的空間。然後改變了scale_fill_continuous()並提供了新的顏色。

p2<-ggplot(subset(data,sep=="SitutationB"), aes(x=tech, y=error)) + 
    geom_bar(aes(fill=error), stat="identity", position="dodge") + 
    facet_grid(sep ~ ., scales="free_y") + 
    scale_fill_continuous(guide=FALSE,low="red",high="purple") + 
    theme(plot.margin=unit(c(-0.4,1,1,1),"lines")) 

現在把兩塊地塊放在一起。

grid.arrange(p1,p2) 

enter image description here

+0

謝謝Didzis Elferts。我認爲有一個技巧可以解決我的問題,而不使用grid.arrange。無論如何,我還沒有使用grid.arrange的facet_grid,而且我認爲它比我的舊圖好看得多。 – alrossi 2013-03-19 11:41:55

相關問題