Carlos J. Gil Bellosta
2016-Sep-03 21:55 UTC
[R-es] Ayuda con gráfico típico de histograma más linea
Sí, la primera reunión de la temporada será el 8 de este mes. Un saludo, Carlos J. Gil Bellosta http://www.datanalytics.com El 3 de septiembre de 2016, 23:52, Ruben Tobalina Ramirez < lagrimaescrita en gmail.com> escribió:> Muchas gracias a todos! > > Pues si, Eric, R a veces me vuelve loco, tiene una lógica muy particular. > Miraré el libro, que lattice no lo he usado nunca. > > Gracias Carlos, con tu ejemplo creo que he conseguido hacer el grafico que > queria. > > Muchas gracias! Os debo una caña un dia de estos - a los madrileños- en > las reuniones de Medialab. Este año os seguireis reuniendo en Medialab? > > Un abrazo! > Prueba algo así: > > library(ggplot2) > > datos <- read.table("Downloads/pec.csv", header = T, sep = ";", dec = ",") > datos$Miles <- as.numeric(gsub("\\.", "", as.character(datos$Miles))) > > datos$hora <- strptime(datos$hora, format = "%H:%M") > > ggplot(datos, aes(x = hora, y = Miles)) + geom_line() + > scale_x_datetime(date_breaks = "15 mins", date_labels = "%H:%M") > > > Además, en aes no hay que hacer referencia a la tabla. Expresiones como > > ggplot(datos, aes(x = datos$hora, y = datos$Miles)) + ... > > son innecesariamente redundantes. > > Salud, > > Carlos J. Gil Bellosta > http://www.datanalytics.com > > El 3 de septiembre de 2016, 18:14, Ruben Tobalina Ramirez < > lagrimaescrita en gmail.com> escribió: > >> Buenas tardes! >> >> uau! Muchas gracias!! He estado trabajando esta mañana y no he podido >> responder antes, aunque esta madrugada antes de ir a currar los he probado. >> Es sorprende como R saca de quicio, probé tus scripts con el csv que mandé >> y va perfecto. Luego pruebo con mis datos - haciendo los cambios >> correspondientes - y R me fusila a errores:D >> >> De hecho el segundo gráfico - el del share - no sale con los >> consiguientes errores -dependiendo la la variable que use (Share o miles): >> >> >> >> *Error: Discrete value supplied to continuous scalegeom_path: Each group >> consists of only one observation. Do you need to adjust the groupaesthetic?* >> >> Modifique el código tal que así: >> >> ggbar<-ggplot(ft, aes(x=ft$hora, y=ft$frec)) + >> geom_bar(stat="identity", width = 0.8, fill="gray") + >> theme(panel.background = element_rect(fill = "white")) + >> scale_y_continuous(limits=c(0,1500)) >> ggline<-ggplot(ft, aes(x=ft$hora, y=ft$Miles)) + >> geom_line()+ >> theme(panel.background = element_rect(fill = "white")) + >> scale_y_continuous(limits=c(0,1500)) >> >> library(gridExtra) >> grid.arrange(ggbar, ggline, nrow=2, ncol=1) >> >> No entendí muy bien por qué no indicabas en el eje x las horas. Entiendo >> que esta hecho a propósito, y por eso supongo que me da el primer error, >> pero no entiendo porque. Gráficando por ejemplo los tweets no hay problema: >> [image: Imágenes integradas 2] >> >> Por cierto, hay alguna forma que no sea poniendo "a mano" como indicabas >> en el correo, de poner los minutos más claro, a lo mejor de 5 en 5, o algo >> así? >> >> Un saludo! >> >> >> El 3 de septiembre de 2016, 0:12, Carlos Ortega <cof en qualityexcellence.es >> > escribió: >> >>> Y bueno, algo más bonito sí que queda con ggplot... >>> >>> #--------------- >>> datIn <- read.csv("pec.csv", header = TRUE, sep = ";", dec = ",") >>> >>> library(ggplot2) >>> lab_x_idx <- c(1, round(nrow(datIn)/2, 0), nrow(datIn)) >>> lab_x <- as.vector(datIn$hora[ lab_x_idx]) >>> fre_gg <- ggplot( datIn, aes( x = 1:nrow(datIn), y = frec)) + >>> geom_bar(stat = "identity") + >>> xlab(paste("Rango horas: ", datIn$hora[1], "-", >>> datIn$hora[nrow(datIn)], sep = "") ) + >>> ylab("Frecuencia") + >>> scale_x_continuous( breaks = lab_x_idx, labels = lab_x ) + >>> theme_minimal() >>> sha_gg <- ggplot( datIn , aes(x = 1:nrow(datIn), y = Share)) + >>> geom_line() + >>> xlab(paste("Rango horas: ", datIn$hora[1], "-", >>> datIn$hora[nrow(datIn)], sep = "") ) + >>> ylab("Share") + >>> ylim(0, max(datIn$Share)*1.10) + >>> scale_x_continuous( breaks = lab_x_idx, labels = lab_x >>> ) + >>> theme_minimal() >>> library(gridExtra) >>> grid.arrange(fre_gg, sha_gg, nrow=2, ncol=1) >>> >>> #--------------- >>> >>> Saludos, >>> Carlos Ortega >>> www.qualityexcellence.es >>> >>> >>> >>> El 2 de septiembre de 2016, 21:47, Carlos Ortega < >>> cof en qualityexcellence.es> escribió: >>> >>>> Hola, >>>> >>>> Aproximación muy sencillita...con gráficos "base": >>>> >>>> #----------------- >>>> >>>> datIn <- read.csv("pec.csv", header = TRUE, sep = ";", dec = ",") >>>> >>>> par(mfrow = c(2,1)) >>>> barplot( >>>> datIn$frec >>>> ,las = 1 >>>> ,col = "green" >>>> ,cex.axis = 0.7, col.axis = "red", font.axis = 2 >>>> ,main = "Frequency" >>>> ) >>>> box() >>>> plot( >>>> datIn$Share >>>> ,type = "b" >>>> ,col = "blue", bg = "blue", col.axis = "red", font.axis = 2 >>>> ,cex = 0.7 >>>> ,cex.axis = 0.7 >>>> ,las = 1 >>>> ,main = "Share", ylab = "", xlab = "" >>>> ,ylim = c(0, 1.10*max(datIn$Share)) >>>> ) >>>> >>>> #----------------- >>>> >>>> Yo haría la representación por separado, mejor que un gráfico con doble >>>> eje. >>>> Pero si quieres hacer un gráfico de doble eje: >>>> http://ellisp.github.io/blog/2016/08/28/dualaxes2 >>>> >>>> Y como referencia para hacer gráficos (en español): >>>> https://www.amazon.es/Gráficos-Estadísticos-Castor-Guisande- >>>> González/dp/8499692117/ref=sr_1_1?ie=UTF8&qid=1472845192&sr>>>> 8-1&keywords=graficos+en+R >>>> <https://www.amazon.es/Gr%C3%A1ficos-Estad%C3%ADsticos-Castor-Guisande-Gonz%C3%A1lez/dp/8499692117/ref=sr_1_1?ie=UTF8&qid=1472845192&sr=8-1&keywords=graficos+en+R> >>>> >>>> Nota: Si quieres incluir las horas minutos en el eje "X" de cualquiera >>>> de los dos gráficos: >>>> http://stackoverflow.com/questions/5182238/r-replace-x-axis- >>>> with-own-values >>>> >>>> Saludos, >>>> Carlos Ortega >>>> www.qualityexcellence.es >>>> >>>> >>>> El 2 de septiembre de 2016, 20:25, Ruben Tobalina Ramirez < >>>> lagrimaescrita en gmail.com> escribió: >>>> >>>>> Buenas tardes, >>>>> >>>>> Tengo una duda con gráficos. Estoy intentando realizar el típico >>>>> gráfico de una variable en histograma y otra en linea, supongo que será >>>>> sencillo pero llevo unos días peleando y no me sale de forma correcta. >>>>> >>>>> Las variables están en un dataframe que muestran las frecuencias de >>>>> tweets minuto a minuto y el share de esos minutos (os adjunto un archivo en >>>>> csv con el dataframe). >>>>> >>>>> Una muestra del data frame: >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> * hora frec Miles Share 1 20:22 87 1.016 >>>>> 13,0 >>>>> 2 20:23 123 1.031 13,33 20:24 153 1.048 13,5 4 20:25 192 1.165 15,0 >>>>> 5 20:26 175 1.239 15,8 6 20:27 225 1.331 17,0 * >>>>> >>>>> He probado con *plot* y el parámetro *new* sin éxito, y ahora estaba >>>>> probando con *ggplot*: >>>>> >>>>> >>>>> >>>>> *ggplot(ft, aes(ft[,2:3])) + geom_bar(aes(ft[,2]), colour="black", >>>>> fill = "orange") + geom_line(aes(x=ft$hora,y=ft[,3]), colour="black") * >>>>> >>>>> Se me muestran las variables pero de forma incorrecta. ¿Alguna >>>>> sugerencia? >>>>> De paso, me podéis indicar algún manual para aprender a realizar >>>>> gráficos con R? >>>>> >>>>> Muchas gracias! >>>>> >>>>> Un saludo!!! >>>>> >>>>> >>>>> -- >>>>> Rubén. >>>>> >>>>> _______________________________________________ >>>>> 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 >>>> >>> >>> >>> >>> -- >>> Saludos, >>> Carlos Ortega >>> www.qualityexcellence.es >>> >> >> >> >> -- >> Rubén. >> >> _______________________________________________ >> R-help-es mailing list >> R-help-es en r-project.org >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> > > > _______________________________________________ > R-help-es mailing list > R-help-es en r-project.org > https://stat.ethz.ch/mailman/listinfo/r-help-es >------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20160903/f6e190cc/attachment-0001.html> ------------ próxima parte ------------ A non-text attachment was scrubbed... Name: image.png Type: image/png Size: 16429 bytes Desc: no disponible URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20160903/f6e190cc/attachment-0001.png>
Ruben Tobalina Ramirez
2016-Sep-06 19:33 UTC
[R-es] Ayuda con gráfico típico de histograma más linea
Buenas, gracias a los que me ayudaron, he conseguido hacer el código más o menos como queria. Lo pego por aqui por si a alguien le interesa. Me hubiese gustado hacerlo en dos ejes pero tengo que entregar la practica de la especialidad en 3 dias y hay muchas cosas que revisar, pero ya que he visto como se hace lo investigaré. ft$hora <- strptime(ft$hora, format = "%H:%M", tz="GMT-2") ft$Miles <- as.numeric(gsub("\\.", "", as.character(ft$Miles))) ft$Share <- as.numeric(gsub("\\,", ".", as.character(ft$Share))) ggbar <- ggplot(ft, aes(x = hora, y = frec)) + geom_area(fill= "gray") + scale_x_datetime(date_breaks = "5 mins", date_labels = "%H:%M") + theme(panel.background = element_rect(fill = "white")) + scale_y_continuous(limits=c(0,1500)) + labs(x = "Minutos", y = "Tweets") + # Etiquetas o títulos de los ejes theme(axis.text.x=element_text(angle=90)) # Orientación texto eje x ggshr <- ggplot(ft, aes(x = hora, y = Share)) + geom_line(color="blue") + scale_x_datetime(date_breaks = "5 mins", date_labels = "%H:%M") + theme(panel.background = element_rect(fill = "white")) + scale_y_continuous(limits=c(0,50)) + labs(x = "Minutos", y = "Share (%)") + # Etiquetas o títulos de los ejes theme(axis.text.x=element_text(angle=90)) # Orientación texto eje x library(gridExtra) grid.arrange(ggbar, ggshr, nrow=2, ncol=1) Buenas noches! PD: Se me jodido, o esta punto de hacerlo mi portátil. Alguna sugerencia de marca "normal" que funcione de base muy bien con Linux?? Rubén. [[alternative HTML version deleted]]
Carlos Ortega
2016-Sep-06 20:50 UTC
[R-es] Ayuda con gráfico típico de histograma más linea
Hola, Dell es los pocos que yo sepa que ofrecen equipos con Linux instalado como SO de base: http://www.dell.com/es/empresas/p/xps-13-9350-laptop-ubuntu/pd?oc=bnx9333 Saludos, Carlos Ortega www.qualityexcellence.es El 6 de septiembre de 2016, 21:33, Ruben Tobalina Ramirez < lagrimaescrita en gmail.com> escribió:> Buenas, > > gracias a los que me ayudaron, he conseguido hacer el código más o menos > como queria. Lo pego por aqui por si a alguien le interesa. Me hubiese > gustado hacerlo en dos ejes pero tengo que entregar la practica de la > especialidad en 3 dias y hay muchas cosas que revisar, pero ya que he visto > como se hace lo investigaré. > > ft$hora <- strptime(ft$hora, format = "%H:%M", tz="GMT-2") > ft$Miles <- as.numeric(gsub("\\.", "", as.character(ft$Miles))) > ft$Share <- as.numeric(gsub("\\,", ".", as.character(ft$Share))) > > ggbar <- ggplot(ft, aes(x = hora, y = frec)) + > geom_area(fill= "gray") + > scale_x_datetime(date_breaks = "5 mins", date_labels = "%H:%M") + > theme(panel.background = element_rect(fill = "white")) + > scale_y_continuous(limits=c(0,1500)) + > labs(x = "Minutos", y = "Tweets") + # Etiquetas o títulos de los ejes > theme(axis.text.x=element_text(angle=90)) # Orientación texto eje x > > ggshr <- ggplot(ft, aes(x = hora, y = Share)) + geom_line(color="blue") + > scale_x_datetime(date_breaks = "5 mins", date_labels = "%H:%M") + > theme(panel.background = element_rect(fill = "white")) + > scale_y_continuous(limits=c(0,50)) + > labs(x = "Minutos", y = "Share (%)") + # Etiquetas o títulos de los ejes > theme(axis.text.x=element_text(angle=90)) # Orientación texto eje x > > library(gridExtra) > grid.arrange(ggbar, ggshr, nrow=2, ncol=1) > > Buenas noches! > > PD: Se me jodido, o esta punto de hacerlo mi portátil. Alguna sugerencia de > marca "normal" que funcione de base muy bien con Linux?? > > Rubén. > > [[alternative HTML version deleted]] > > _______________________________________________ > 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]]