[R-es] Ayuda con gráfico típico de histograma más linea

Carlos J. Gil Bellosta cgb en datanalytics.com
Sab Sep 3 19:11:04 CEST 2016


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>


Más información sobre la lista de distribución R-help-es