José Luis Cañadas Reche
2013-Mar-07 12:18 UTC
[R-es] Gráfico de barras positivas y negativas con ggplot2
Hola a todos. Tengo los siguientes datos datos <- structure(list(comunidad = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 8L, 7L, 9L, 11L, 12L, 13L, 14L, 16L, 17L, 18L, 19L, 10L, 15L, 1L, 2L, 3L, 4L, 5L, 6L, 8L, 7L, 9L, 11L, 12L, 13L, 14L, 16L, 17L, 18L, 19L, 10L, 15L), .Label = c("Andalucía" , "Aragón" , "Asturias ", "Baleares ", "Canarias", "Cantabria", "Castilla - La Mancha", "Castilla y León" , "Cataluña" , "Ceuta ", "C. Valenciana", "Extremadura", "Galicia", "Madrid ", "Melilla", "Murcia", "Navarra ", "País Vasco" , "Rioja (La)"), class = "factor"), variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("esp", "ext"), class = "factor"), value = c(8928L, 1256L, -4555L, 6567L, -12257L, 421L, -13078L, 3240L, 30363L, 9846L, -2059L, -15639L, 61411L, 6850L, 4492L, 1849L, 569L, 758L, 1095L, 16955L, 1918L, 428L, -242L, 3832L, 319L, 693L, 3314L, 927L, 2230L, 822L, 1715L, -52531L, -2470L, -1977L, 6638L, 85L, 884L, 1231L)), .Names = c("comunidad", "variable", "value"), row.names = c(NA, -38L), class = "data.frame") Y quiero hacer un gráfico de barras con ggplot2 de forma que, por ejemplo para Madrid, tenga la barra de esp con valores positivos y la de ext con valores negativos. He probado con el siguiente código library(ggplot2) p <- ggplot(data=datos,aes(x=comunidad,y=value)) p + geom_bar(stat = "identity",aes(fill=variable)) Cuando los valores de esp y ext son los dos del mismo signo en una comunidad , si salen bien las barras, pero no si son distintos. También salen unos cuantos warnings , entre ellos el que creo que da la clave. Mensajes de aviso perdidos Stacking not well defined when ymin != 0 ¿alguna idea de cómo puedo conseguirlo? Gracias
José Luis Cañadas Reche
2013-Mar-07 12:42 UTC
[R-es] Gráfico de barras positivas y negativas con ggplot2
Me contesto yo mismo , porque he encontrado la solución. El truco es el parámetro position de geom_bar. Pongo el gráfico con un poco de "customizado". datos <- structure(list(comunidad = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 8L, 7L, 9L, 11L, 12L, 13L, 14L, 16L, 17L, 18L, 19L, 10L, 15L, 1L, 2L, 3L, 4L, 5L, 6L, 8L, 7L, 9L, 11L, 12L, 13L, 14L, 16L, 17L, 18L, 19L, 10L, 15L), .Label = c("Andalucía" , "Aragón" , "Asturias ", "Baleares ", "Canarias", "Cantabria", "Castilla - La Mancha", "Castilla y León" , "Cataluña" , "Ceuta ", "C. Valenciana", "Extremadura", "Galicia", "Madrid ", "Melilla", "Murcia", "Navarra ", "País Vasco" , "Rioja (La)"), class = "factor"), variable = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("esp", "ext"), class = "factor"), value = c(8928L, 1256L, -4555L, 6567L, -12257L, 421L, -13078L, 3240L, 30363L, 9846L, -2059L, -15639L, 61411L, 6850L, 4492L, 1849L, 569L, 758L, 1095L, 16955L, 1918L, 428L, -242L, 3832L, 319L, 693L, 3314L, 927L, 2230L, 822L, 1715L, -52531L, -2470L, -1977L, 6638L, 85L, 884L, 1231L)), .Names = c("comunidad", "variable", "value"), row.names = c(NA, -38L), class = "data.frame") p <- ggplot(data=datos ,aes(x=comunidad, y=value)) p + geom_bar(stat = "identity", aes(fill=variable), position = "identity") + scale_y_continuous(name=" ") + scale_fill_brewer(palette="Dark2", type="qual" ,name=" ",labels=c("Españoles","Extranjeros")) + theme(axis.text.x = element_text(size=rel(1.1),color="black",angle=90))
José Luis Cañadas Reche
2013-Mar-07 12:45 UTC
[R-es] Gráfico de barras positivas y negativas con ggplot2
Pues tampoco era la solución poner identity, lo más próximo a lo que quiero es con position= "dodge". Sigo buscando. p <- ggplot(data=datos ,aes(x=comunidad, y=value)) p + geom_bar(stat = "identity", aes(fill=variable), position = "dodge") + scale_y_continuous(name=" ") + scale_fill_brewer(palette="Dark2", type="qual" ,name=" ",labels=c("Españoles","Extranjeros")) + theme(axis.text.x = element_text(size=rel(1.1),color="black",angle=90))
En el pasado use la función qplot de la siguiente manera: qplot(comunidad, value, data=datos, geom="bar", stat="identity", fill=comunidad) Espero te sirva, Daniel Merino El día 7 de marzo de 2013 09:45, José Luis Cañadas Reche <canadasreche en gmail.com> escribió:> Pues tampoco era la solución poner identity, lo más próximo a lo que quiero > es con position= "dodge". Sigo buscando. > > > p <- ggplot(data=datos ,aes(x=comunidad, y=value)) > p + geom_bar(stat = "identity", aes(fill=variable), position = "dodge") + > > scale_y_continuous(name=" ") + > scale_fill_brewer(palette="Dark2", type="qual" ,name=" > ",labels=c("Españoles","Extranjeros")) + > theme(axis.text.x = element_text(size=rel(1.1),color="black",angle=90)) > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es-- Daniel