2012-06-12 10 views
6

Tengo el p3 trama de datos a continuación:ggplot2 posición geom_bar = "esquivar" no esquivar

  test  result 
    1  1 26.87778 
    2  1 24.52598 
    3  1 24.02202 
    4  1 20.32632 
    5  1 22.00618 
    6  2 19.84013 
    7  2 19.68983 
    8  2 19.84013 
    9  2 19.23892 
    10  2 19.23892 
    11  3 34.36430 
    12  3 33.28196 
    13  3 33.82313 
    14  3 33.82313 
    15  3 32.47020 
    16  4 25.55169 
    17  4 26.90442 
    18  4 25.40138 
    19  4 24.19895 
    20  4 25.85230 
    21  4 25.70199 
    22  4 24.95047 
    23  5 18.64646 
    24  5 18.64646 
    25  5 17.80653 
    26  5 18.64646 
    27  5 18.31049 

que estoy tratando de hacer un diagrama de barras con los resultados esquivado utilizando el código:

ggplot(p3, aes(x = test, y = result))+ geom_bar(position="dodge", stat="identity") 

pero no funciona en absoluto. No entiendo por qué no funciona, ya que utilicé el mismo código antes y funcionó.

Respuesta

0

Este fue respondida por Dennis Murphy:

p3$test <- factor(p3$test) 
p3$fac <- factor(unlist(sapply(as.vector(table(p3$test)), seq_len))) 
ggplot(p3, aes(x = test, y = result, fill = fac)) + 
     geom_bar(position = 'dodge', stat = 'identity') 

Ajuste de las variables:

ggplot(p3, aes(x = test, y = result, color = fac, fill = test)) + 
    geom_bar(position = 'dodge', stat = 'identity', linetype = 0) 

Casi obtuve lo que quería, excepto que el color (contorno) debería ser el mismo. pero estaba lo suficientemente cerca.

9
ggplot(p3, aes(x = test, y = result, group = result)) + 
    geom_bar(position="dodge", stat="identity") 

se puede ver lo que está sucediendo si cambia el argumento group a color.

ggplot(p3, aes(x = test, y = result, color = result)) + 
    geom_bar(position="dodge", stat="identity") 

Editado por sus comentarios:

Parece que hay un número impar de grupos porque hay. El grupo 4 tiene 7 elementos en los datos que ha proporcionado. el grupo 3 tiene 5, pero 2 de ellos son idénticos. La gráfica muestra la altura correctamente y se está agrupando como elementos juntos. es como si llamaras unique en cada grupo.

creo trazado:

ggplot(p3, aes(x=test, y=result, group=result, color=result)) + 
    geom_bar(position='dodge', stat='identity') 

muestra esta bastante bien. En cuanto a que cada grupo tenga 5 elementos, ese no es el caso. Grupo 4 tiene 7. Para ver lo que estás describiendo que podría hacer algo como:

ggplot(p3, aes(x=as.integer(row.names(p3)), y=result, fill=factor(test))) + 
    geom_bar(position='dodge', stat='identity') 
+0

Derecho, iba a señalar que sin una estética de agrupación natural como 'relleno' o' color', esquivar no hará mucho. – joran

+0

@Joran Buen punto. Sin embargo, incluso con 'fill' o' colour' agregado a los aes, el 'position = 'dodge'' no ocurre. Debes usar 'group' para que 'dodge' sepa qué cosas está esquivando. 'stat = 'identity'' no proporciona una agrupación automatizada como hacen otras estadísticas. – Justin

+0

¡De nuevo! :) – joran

Cuestiones relacionadas