2013-10-17 21 views
7

Standart hatalarla ilişkili bazı verilerim var ve bunları hata çubuklarıyla görüntülemek istiyorum.ggplot2 hata çubuklarının genişliği

# generate some data 
hod <- data.frame(h = c(1:24,1:24,1:24), mean = 1:(24*3) + runif(24*3, 0, 5),ci = runif(24*3, 0, 2), t = c(rep("a",24),rep("b",24),rep("c",24))) 

pd <- position_dodge(0.3) 
    dayplot <- ggplot(hod, aes(x=h, y=mean, colour=as.factor(t),group=as.factor(t))) + 
    geom_line(position=pd, size=1) + 
    geom_errorbar(aes(ymin=mean-ci, ymax=mean+ci), 
        width=1, 
        size=0.5, 
        position=pd) + 
    geom_point(position=pd, shape=21, size=1, fill="white") + 
    scale_x_continuous(limits=c(-0.5,23.5), 
         breaks=c(0:8*3), 
         labels=ifelse(
           c(0:8*3) < 10, 
           paste('0',c(0:8*3),':00',sep=''), 
           paste(c(0:8*3),':00',sep='') 
          ) 
         ) + 
    xlab("Hour of day") + ylab(ylabel) + labs(title = varlabels[var]) + 
    theme_minimal() + 
    theme(plot.margin = unit(c(1,0,1,1), "cm"), 
      axis.title.x = element_text(vjust=-1), 
      axis.title.y = element_text(angle=90, vjust=0), 
      legend.margin = unit(c(0), "cm"), 
      legend.key.height = unit(c(0.9), "cm"), 
      panel.grid.major = element_line(colour=rgb(0.87,0.87,0.87)), 
      panel.grid.minor = element_blank(), 
      plot.background = element_rect(fill = rgb(0.97,0.97,0.97), linetype=0) 
    ) 

ilgi tek şey muhtemelen:

geom_errorbar(aes(ymin=mean-ci, ymax=mean+ci), 
         width=1, 
         size=0.5, 
         position=pd) 

O verir: Ben ne var all

Şimdi ben grup faktör değişken (as.factor(t)) tarafından veri, ben İstediğim şey bir satır yerine birkaç satır olsun, ANCAK, gördüğünüz gibi, hata çubuklarındaki yatay çizgiler daha dar ve nedenini anlayamıyorum. vesize özniteliğini değiştirmeyi denedim, ancak hiçbir şey olmuyor. Verilerden bağımsız olarak, her grafik için yatay çizgilerin aynı genişliğine sahip olmanın bir yolu var mı? Demek istediğim, neden değişmeli? Veya bu genişlik bazı bilgileri iletiyor mu?

enter image description here

+1

Ben veri ve böylece problem bağımsız olması gerektiği gibi birileri, geom_errorbar' '' için size' bana width' 'kullanımı ve işlevini açıklamak ve eğer zaten yardımcı olacağını düşünüyorum. – wnstnsmth

+0

Sorunu basitleştirilmiş bir örnekle yeniden oluşturmaya çalıştım ve yapamadım. Açık değil, ne yanlış gidiyor. Veri sağlarsanız sorunu bulmak çok daha kolaydır. – Roland

+0

Aynı problemim var. Çözdün mü hiç? – while

cevap

3

Aşağıda gelişigüzel veriyi kullanarak tekrarlanabilir bir örnektir. Sorunun çözümü, genişliği, sahip olduğunuz sınıf/faktör sayısına göre çarpmaktır. Aşağıdaki çizimde, üç faktör kullandım, 3 genişlik kullanarak sorunu giderir. ggplot2, x ekseninde sayısal değerler yerine, veri kümenizdeki veri noktalarının sayısıyla göreceli genişliği hesaplar. Bu (IMO) bir hatadır.

library(ggplot2) 
library(grid) 

#plot with factors 
hod <- data.frame(h = c(1:24,1:24,1:24), mean = 1:(24*3) + runif(24*3, 0, 5),ci = runif(24*3, 0, 2), t = c(rep("a",24),rep("b",24),rep("c",24))) 
pd <- position_dodge(0.3) 
    dayplot <- ggplot(hod, aes(x=h, y=mean, colour=as.factor(t),group=as.factor(t))) + 

    geom_line(position=pd, size=1) + 
    geom_errorbar(aes(ymin=mean-ci, ymax=mean+ci), 
        width=1, 
        size=0.5, 
        position=pd) + 
    geom_point(position=pd, shape=21, size=1, fill="white") + 
    scale_x_continuous(limits=c(-0.5,23.5), 
         breaks=c(0:8*3), 
         labels=ifelse(
           c(0:8*3) < 10, 
           paste('0',c(0:8*3),':00',sep=''), 
           paste(c(0:8*3),':00',sep='') 
          ) 
         ) + 
    xlab("Hour of day") + 
    theme_minimal() + 
    theme(plot.margin = unit(c(1,0,1,1), "cm"), 
      axis.title.x = element_text(vjust=-1), 
      axis.title.y = element_text(angle=90, vjust=0), 
      legend.margin = unit(c(0), "cm"), 
      legend.key.height = unit(c(0.9), "cm"), 
      panel.grid.major = element_line(colour=rgb(0.87,0.87,0.87)), 
      panel.grid.minor = element_blank(), 
      plot.background = element_rect(fill = rgb(0.97,0.97,0.97), linetype=0) 
    ) 
print(dayplot) 


#plot without factors 
hod <- data.frame(h = c(1:24,1:24,1:24), mean = 1:(24) + runif(24, 0, 5),ci = runif(24, 0, 2)) 
pd <- position_dodge(0.3) 
    dayplot <- ggplot(hod, aes(x=h, y=mean)) + 

    geom_line(position=pd, size=1) + 
    geom_errorbar(aes(ymin=mean-ci, ymax=mean+ci), 
        width=1, 
        size=0.5, 
        position=pd) + 
    geom_point(position=pd, shape=21, size=1, fill="white") + 
    scale_x_continuous(limits=c(-0.5,23.5), 
         breaks=c(0:8*3), 
         labels=ifelse(
           c(0:8*3) < 10, 
           paste('0',c(0:8*3),':00',sep=''), 
           paste(c(0:8*3),':00',sep='') 
          ) 
         ) + 
    xlab("Hour of day") + 
    theme_minimal() + 
    theme(plot.margin = unit(c(1,0,1,1), "cm"), 
      axis.title.x = element_text(vjust=-1), 
      axis.title.y = element_text(angle=90, vjust=0), 
      legend.margin = unit(c(0), "cm"), 
      legend.key.height = unit(c(0.9), "cm"), 
      panel.grid.major = element_line(colour=rgb(0.87,0.87,0.87)), 
      panel.grid.minor = element_blank(), 
      plot.background = element_rect(fill = rgb(0.97,0.97,0.97), linetype=0) 
    ) 

print(dayplot) 
+0

Şimdi, örneğimin farkı nerede yatıyor? Görebildiğim kadarıyla hala width = 1' kullanıyorsun. 'Width = 3' kullanmanız mı demek istiyorsun? – wnstnsmth

+0

Evet. Width = 9 (veya sahip olduğunuz birçok seviye) ile kendi örneğini deneyin. – thc

+1

Teşekkürler. GitHub'da bir sorun yayınladım https://github.com/hadley/ggplot2/issues/1068 – wnstnsmth

İlgili konular