Hola. Siguiendo a Mittal (2001); R Graph Cookbook creo haber logrado construir el gráfico de barras que buscada. La matriz que utilizo para el "height" va adjunta. Y mi sintaxis: barplot(t(barras), col=col.segmentos, border=F , names.arg=Meses, las=2, cex=.75, cex.axis=0.8 , ylab="% del Segmento sobre el Total") legend(.5, .2, ncol=5, cex=.75, bty="n" #bg="white" #, lwd=F , horiz=T), pch = 15 , segmentos #Referencias , fill = col.segmentos, border = "darkblue" ) # grid(nx=NA, ny=NULL, col = "gray", lwd = 1, lty = 3) # abline(v=c(12, 24, 36, 48, 60), lwd = 1, lty = 3, col = "red") #red para que se ven los cortes en los años text(c(6, 18, 30, 42, 54), rep(.3, 5), c(2011, 2012, 2013, 2014, 2015)) ?Queda bastante lindo, pero el problema lo tengo con ?abline y text, que quedan "desajustados" de los meses Dic de cada año, porque está mal indicada la referencia en c(12, 24, 36, 48, 60), a pesar de que dim(barras) y las categorías claramente son 67, que son las barras que contruyo. Luego, cuando intento entender por qué, pruebo: mm <- barplot(t(barras), col=col.segmentos, border=F , names.arg=Meses, las=2, cex=.75, cex.axis=0.8 , ylab="% del Segmento sobre el Total") y resulta:> mm[1] 0.7 1.9 3.1 4.3 5.5 6.7 7.9 9.1 10.3 11.5 12.7 13.9 15.1 16.3 17.5 18.7 19.9 21.1 22.3 23.5 24.7 25.9 27.1 28.3 29.5 [26] 30.7 31.9 33.1 34.3 35.5 36.7 37.9 39.1 40.3 41.5 42.7 43.9 45.1 46.3 47.5 48.7 49.9 51.1 52.3 53.5 54.7 55.9 57.1 58.3 59.5 [51] 60.7 61.9 63.1 64.3 65.5 66.7 67.9 69.1 70.3 71.5 72.7 73.9 75.1 76.3 77.5 78.7 79.9 Lo cual parece una buena pista, pero no consigo entender qué hace... por qué el resultado no es 1:67? ¿Tengo que hacer algo especial para eso? Obvio, que ahora si utilizo: abline(v=mm[c(12, 24, 36, 48, 60)], lwd = 1, lty = 3, col = "red") #Para los Años text(mm[c(12, 24, 36, 48, 60)]-6, rep(.3, 5), c(2011, 2012, 2013, 2014, 2015)) funcionaría, pero me parece poco intuitivo y además no entiendo por qué lo hace y me "obliga" a crear el objeto mm, en lugar de hacerlo directamente. Muchas gracias. -- Mauricio ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20160906/3591d94a/attachment-0001.html> ------------ próxima parte ------------ A non-text attachment was scrubbed... Name: barras.csv Type: text/csv Size: 10891 bytes Desc: no disponible URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20160906/3591d94a/attachment-0001.bin>
Hola, En los gráficos "base", las barras se construyen repartiéndolas sobre el eje "X". Para saber sobre qué punto cae el punto intermedio, la forma de hacerlo es recuperando los valores del objeto "barplot" como has hecho. Y una vez recuperados, utilizas estos puntos para pintar líneas de forma que coincidan las "Xs" de los centros de las barras y tus "Xs" que quieres añadir de tus puntos o líneas que vas a superponer. Esto, aparece reflejado en la ayuda de *barplot*, lo destaco en negrita. El epígrafe de la ayuda "Value" siempre detalla los valores que devuelve el objeto descrito. #-------------- *Value* A numeric vector (or matrix, when beside = TRUE), say mp, *giving the coordinates of all the bar midpoints drawn, useful for adding to the graph.* If beside is true, use colMeans(mp) for the midpoints of each *group* of bars, see example. #-------------- Saludos, Carlos Ortega www.qualityexcellence.es El 6 de septiembre de 2016, 22:23, Mauricio Monsalvo <m.monsalvo en gmail.com> escribió:> Hola. > Siguiendo a Mittal (2001); R Graph Cookbook creo haber logrado construir > el gráfico de barras que buscada. La matriz que utilizo para el "height" va > adjunta. > Y mi sintaxis: > barplot(t(barras), col=col.segmentos, border=F > , names.arg=Meses, las=2, cex=.75, cex.axis=0.8 > , ylab="% del Segmento sobre el Total") > legend(.5, .2, ncol=5, cex=.75, bty="n" #bg="white" #, lwd=F , > horiz=T), pch = 15 > , segmentos #Referencias > , fill = col.segmentos, border = "darkblue" ) # > grid(nx=NA, ny=NULL, col = "gray", lwd = 1, lty = 3) # > abline(v=c(12, 24, 36, 48, 60), lwd = 1, lty = 3, col = "red") #red > para que se ven los cortes en los años > text(c(6, 18, 30, 42, 54), rep(.3, 5), c(2011, 2012, 2013, 2014, > 2015)) > ?Queda bastante lindo, pero el problema lo tengo con ?abline y text, que > quedan "desajustados" de los meses Dic de cada año, porque está mal > indicada la referencia en c(12, 24, 36, 48, 60), a pesar de que dim(barras) > y las categorías claramente son 67, que son las barras que contruyo. > Luego, cuando intento entender por qué, pruebo: > mm <- barplot(t(barras), col=col.segmentos, border=F > , names.arg=Meses, las=2, cex=.75, cex.axis=0.8 > , ylab="% del Segmento sobre el Total") > y resulta: > > mm > [1] 0.7 1.9 3.1 4.3 5.5 6.7 7.9 9.1 10.3 11.5 12.7 13.9 15.1 16.3 > 17.5 18.7 19.9 21.1 22.3 23.5 24.7 25.9 27.1 28.3 29.5 > [26] 30.7 31.9 33.1 34.3 35.5 36.7 37.9 39.1 40.3 41.5 42.7 43.9 45.1 46.3 > 47.5 48.7 49.9 51.1 52.3 53.5 54.7 55.9 57.1 58.3 59.5 > [51] 60.7 61.9 63.1 64.3 65.5 66.7 67.9 69.1 70.3 71.5 72.7 73.9 75.1 76.3 > 77.5 78.7 79.9 > Lo cual parece una buena pista, pero no consigo entender qué hace... por > qué el resultado no es 1:67? ¿Tengo que hacer algo especial para eso? > Obvio, que ahora si utilizo: > abline(v=mm[c(12, 24, 36, 48, 60)], lwd = 1, lty = 3, col = "red") > #Para los Años > text(mm[c(12, 24, 36, 48, 60)]-6, rep(.3, 5), c(2011, 2012, 2013, > 2014, 2015)) > funcionaría, pero me parece poco intuitivo y además no entiendo por qué lo > hace y me "obliga" a crear el objeto mm, en lugar de hacerlo directamente. > Muchas gracias. > -- > Mauricio > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >-- Saludos, Carlos Ortega www.qualityexcellence.es [[alternative HTML version deleted]]
Muchas gracias por tu respuesta, Carlos. El 6 de septiembre de 2016, 17:47, Carlos Ortega <cof en qualityexcellence.es> escribió:> Hola, > > En los gráficos "base", las barras se construyen repartiéndolas sobre el > eje "X". Para saber sobre qué punto cae el punto intermedio, la forma de > hacerlo es recuperando los valores del objeto "barplot" como has hecho. Y > una vez recuperados, utilizas estos puntos para pintar líneas de forma que > coincidan las "Xs" de los centros de las barras y tus "Xs" que quieres > añadir de tus puntos o líneas que vas a superponer. > > Esto, aparece reflejado en la ayuda de *barplot*, lo destaco en negrita. > El epígrafe de la ayuda "Value" siempre detalla los valores que devuelve > el objeto descrito. > > #-------------- > > *Value* > > A numeric vector (or matrix, when beside = TRUE), say mp, *giving the > coordinates of all the bar midpoints drawn, useful for adding to the graph.* > > If beside is true, use colMeans(mp) for the midpoints of each *group* of > bars, see example. > #-------------- > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > El 6 de septiembre de 2016, 22:23, Mauricio Monsalvo <m.monsalvo en gmail.com > > escribió: > >> Hola. >> Siguiendo a Mittal (2001); R Graph Cookbook creo haber logrado construir >> el gráfico de barras que buscada. La matriz que utilizo para el "height" va >> adjunta. >> Y mi sintaxis: >> barplot(t(barras), col=col.segmentos, border=F >> , names.arg=Meses, las=2, cex=.75, cex.axis=0.8 >> , ylab="% del Segmento sobre el Total") >> legend(.5, .2, ncol=5, cex=.75, bty="n" #bg="white" #, lwd=F , >> horiz=T), pch = 15 >> , segmentos #Referencias >> , fill = col.segmentos, border = "darkblue" ) # >> grid(nx=NA, ny=NULL, col = "gray", lwd = 1, lty = 3) # >> abline(v=c(12, 24, 36, 48, 60), lwd = 1, lty = 3, col = "red") >> #red para que se ven los cortes en los años >> text(c(6, 18, 30, 42, 54), rep(.3, 5), c(2011, 2012, 2013, 2014, >> 2015)) >> ?Queda bastante lindo, pero el problema lo tengo con ?abline y text, que >> quedan "desajustados" de los meses Dic de cada año, porque está mal >> indicada la referencia en c(12, 24, 36, 48, 60), a pesar de que dim(barras) >> y las categorías claramente son 67, que son las barras que contruyo. >> Luego, cuando intento entender por qué, pruebo: >> mm <- barplot(t(barras), col=col.segmentos, border=F >> , names.arg=Meses, las=2, cex=.75, cex.axis=0.8 >> , ylab="% del Segmento sobre el Total") >> y resulta: >> > mm >> [1] 0.7 1.9 3.1 4.3 5.5 6.7 7.9 9.1 10.3 11.5 12.7 13.9 15.1 >> 16.3 17.5 18.7 19.9 21.1 22.3 23.5 24.7 25.9 27.1 28.3 29.5 >> [26] 30.7 31.9 33.1 34.3 35.5 36.7 37.9 39.1 40.3 41.5 42.7 43.9 45.1 >> 46.3 47.5 48.7 49.9 51.1 52.3 53.5 54.7 55.9 57.1 58.3 59.5 >> [51] 60.7 61.9 63.1 64.3 65.5 66.7 67.9 69.1 70.3 71.5 72.7 73.9 75.1 >> 76.3 77.5 78.7 79.9 >> Lo cual parece una buena pista, pero no consigo entender qué hace... por >> qué el resultado no es 1:67? ¿Tengo que hacer algo especial para eso? >> Obvio, que ahora si utilizo: >> abline(v=mm[c(12, 24, 36, 48, 60)], lwd = 1, lty = 3, col = "red") >> #Para los Años >> text(mm[c(12, 24, 36, 48, 60)]-6, rep(.3, 5), c(2011, 2012, 2013, >> 2014, 2015)) >> funcionaría, pero me parece poco intuitivo y además no entiendo por qué >> lo hace y me "obliga" a crear el objeto mm, en lugar de hacerlo >> directamente. >> Muchas gracias. >> -- >> Mauricio >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es en r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es >-- Mauricio [[alternative HTML version deleted]]