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
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.