Carlos Ortega
2016-Sep-02 22:12 UTC
[R-es] Ayuda con gráfico típico de histograma más linea
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 [[alternative HTML version deleted]]
Ruben Tobalina Ramirez
2016-Sep-03 16:14 UTC
[R-es] Ayuda con gráfico típico de histograma más linea
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. ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20160903/5b125cbe/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/5b125cbe/attachment-0001.png>
Carlos J. Gil Bellosta
2016-Sep-03 17:11 UTC
[R-es] Ayuda con gráfico típico de histograma más linea
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 >------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20160903/64d5d17d/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/64d5d17d/attachment-0001.png>