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>