2017-08-03 6 views
0

Dies wurde in anderen Posts gefragt, aber ich habe nicht herausgefunden, wie position_dodge richtig zu verwenden.ggplot2 - So zentrieren Konfidenzintervall Balken auf Balkendiagramm

Wie kann ich jeden CI-Balken in jedem Balken des Diagramms zentrieren?

df <- structure(list(Ano = c(2012, 2012, 2012, 2016, 2016, 2016), 
       Grupo = c("Controle", "Tratado", "Total", 
         "Controle", "Tratado", "Total"), 
       Margem_Mediana = c(4.4,3.1, 4.2, 3.8, 2.5, 3.6), 
       Erro_Padrao = c(0.0236, 0.0460, 0.0214, 0.0257, 0.0478, 0.0231)), 
      class = c("tbl_df", "tbl", "data.frame"), 
      row.names = c(NA, -6L), .Names = c("Ano", "Grupo", "Margem_Mediana", "CI")) 


ggplot(df, aes(x = Ano, y = Margem_Mediana, fill = Grupo)) + 
    geom_bar(data = subset(df, Grupo != 'Total'), 
         position = position_dodge(), stat = 'identity') + 
    geom_errorbar(data = subset(df, Grupo != 'Total'), 
           aes(ymin = Margem_Mediana - CI, 
        ymax = Margem_Mediana + CI), 
       width = 1.5, 
       size = 0.5) 
+0

Bitte überarbeiten Sie Ihren Code, ändern Sie 'df <-' nach 'graf_votos <-' und' .Names = c ("Ano", "Grupo", "Margem_Mediana", "CI") 'to' .Names = c ("Ano", "Grupo", "Margem_Mediana", "Erro_Padrao") ' – kitman0804

+0

Entschuldigung. Behebt es –

Antwort

2

Eine mögliche Lösung:

hinzufügen position = position_dodge() Argument in Ihrem geom_errorbar und geben Sie Ihre Bar width.

ggplot(df, aes(x = Ano, y = Margem_Mediana, fill = Grupo)) + 
    geom_bar(data = subset(df, Grupo != 'Total'), 
      width = 1.5, 
      position = position_dodge(), 
      stat = 'identity') + 
    geom_errorbar(data = subset(df, Grupo != 'Total'), 
       aes(ymin = Margem_Mediana - CI, 
        ymax = Margem_Mediana + CI), 
       width = 1.5, 
       position = position_dodge(), 
       size = 0.5) 

Nach einiger Suche (zB this post und this page), kann der Code weiter verbessert werden,

ggplot(subset(df, Grupo != 'Total'), 
     aes(x = as.factor(Ano), y = Margem_Mediana, fill = Grupo)) + 
    geom_bar(width = 0.8, 
      position = position_dodge(), 
      stat = 'identity') + 
    geom_errorbar(aes(ymin = Margem_Mediana - CI, 
         ymax = Margem_Mediana + CI), 
        width = 0.4, 
        position = position_dodge(width = 0.8)) + 
    xlab('Ano') 

Sie auch die Position und die Breite der Fehlerbalken mit dem width Argumente in position_dodge() steuern und geom_errorbar()

Wenn Sie die Fehlerbalken zentrieren möchten, können Sie die width in geom_bar() sagen width = 0.8 angeben müssen (sieht so aus, als wäre 0.9 der Standardwert) und wenden Sie den gleichen Wert in position_dodge(width = 0.8) innerhalb geom_errorbar() an (verwenden Sie 0,9, wenn Sie width in geom_bar nicht festlegen). Und width in geom_errorbar wird ggplot die Breite der Fehlerbalken sagen.

+0

Gibt es einen Weg, in dem ich es zentrieren kann, ohne die Abstände nicht mit der gleichen Breite wie der Stab zu haben? –

+1

@ArthurCarvalhoBrito Ich habe meine Antwort bearbeitet, aber es muss immer noch manuell eingestellt werden, um die Fehlerleiste zu zentrieren. – kitman0804

+1

@ArthurCarvalhoBrito Ich habe weitere Details hinzugefügt. Hoffe es ist klar genug. – kitman0804

Verwandte Themen