2012-10-24 45 views
10

我有一個數據集,可以在不同的日子爲不同的組進行測量。如何讓geom_bar中的閃避與geom_errorbar中的閃避一致,geom_point

我想並排顯示不同日期的測量結果,不同的測量棒組之間的間隔條間隔根據測量日的不同而不同。

我在使0123.的閃避與geom_errorbar的閃避一致時遇到了問題。

下面是一個簡單的代碼:

days   = data.frame(day=c(0,1,8,15)); 
groups  = data.frame(group=c("A","B","C","D", "E"), means=seq(0,1,length=5)); 


my_data  = merge(days, groups); 


my_data$mid = exp(my_data$means+rnorm(nrow(my_data), sd=0.25)); 
my_data$sigma = 0.1; 


png(file="bar_and_errors_example.png", height=900, width=1200); 
plot(ggplot(my_data, aes(x=day, weight=mid, ymin=mid-sigma, ymax=mid+sigma, fill=group)) + 
    geom_bar  (position=position_dodge(width=0.5))         + 
    geom_errorbar (position=position_dodge(width=0.5), colour="black")     + 
    geom_point (position=position_dodge(width=0.5), aes(y=mid, colour=group))); 
dev.off(); 

在圖中,將出現errorsegments從其棒的固定偏移(抱歉,沒有允許即使是GGPLOT2受試者新手地塊)。

當binwidth在geom_bar中調整時,偏移量不固定,並且每天都在變化。

請注意,geom_errorbargeom_point串聯閃避。 我如何獲得geom_bar與其他兩個人同意?

任何幫助表示讚賞。

回答

12

對齊問題部分是由於您的酒吧不能代表您想要的數據。以下行正確:

ggplot(my_data, aes(x=day, weight=mid, ymin=mid-sigma, ymax=mid+sigma, fill=group)) + 
    geom_bar  (position=position_dodge(), aes(y=mid), stat="identity") + 
    geom_errorbar (position=position_dodge(width=0.9), colour="black") + 
    geom_point (position=position_dodge(width=0.9), aes(y=mid, colour=group)) 

enter image description here

3

我根據advanced R style guide重新格式化的代碼的第一個變化。

days <- data.frame(day=c(0,1,8,15)) 

groups <- data.frame(
    group=c("A","B","C","D", "E"), 
    means=seq(0,1,length=5) 
    ) 

my_data <- merge(days, groups) 

my_data$mid <- exp(my_data$means+rnorm(nrow(my_data), sd=0.25)) 
my_data$sigma <- 0.1 

現在,當我們看到數據時,我們發現那一天是一個因素,而其他一切都是相同的。

str(my_data) 

要從圖中刪除空白區域,我將day列轉換爲因子。在繼續之前檢查級別是否正確。

my_data$day <- as.factor(my_data$day) 
levels(my_data$day) 

我進行的下一個變化是在你aes參數定義年。我相信你知道,這讓ggplot知道在哪裏尋找y值。然後我將位置參數改爲「閃避」並添加了stat="identity"參數。 "identity"參數告訴g​​gplot在y處繪製y。 geom_errorbargeom_bar繼承閃避位置,因此您可以不指定它,但geom_point不會,因此您必須指定該值。默認閃避是position_dodge(.9)

ggplot(data = my_data, 
aes(x=day, 
    y= mid, 
    ymin=mid-sigma, 
    ymax=mid+sigma,  
    fill=group)) + 
    geom_bar(position="dodge", stat = "identity") + 
    geom_errorbar(position = position_dodge(), colour="black") + 
    geom_point(position=position_dodge(.9), aes(y=mid, colour=group)) 

enter image description here