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