superponer - Trazar series de tiempo con etiquetas de fecha en el eje x
superponer graficas en r (6)
Es posible en ggplot y puedes usar scale_date para esta tarea
library(ggplot2)
Lines <- "Date Visits
11/1/2010 696537
11/2/2010 718748
11/3/2010 799355
11/4/2010 805800
11/5/2010 701262
11/6/2010 531579
11/7/2010 690068
11/8/2010 756947
11/9/2010 718757
11/10/2010 701768
11/11/2010 820113
11/12/2010 645259"
dm <- read.table(textConnection(Lines), header = TRUE)
dm <- mutate(dm, Date = as.Date(dm$Date, "%m/%d/%Y"))
ggplot(data = dm, aes(Date, Visits)) +
geom_line() +
scale_x_date(format = "%b %d", major = "1 day")
Sé que esta pregunta puede ser un cliché, pero estoy teniendo dificultades para hacerlo.
Tengo el conjunto de datos en el siguiente formato:
Date Visits 11/1/2010 696537 11/2/2010 718748 11/3/2010 799355 11/4/2010 805800 11/5/2010 701262 11/6/2010 531579 11/7/2010 690068 11/8/2010 756947 11/9/2010 718757 11/10/2010 701768 11/11/2010 820113 11/12/2010 645259
Quiero crear un gráfico de series de tiempo, con eje x que representa vists de tiempo y eje y. Además, quiero marcar el eje x con la fecha. El código que estaba usando es el siguiente:
dm$newday = as.POSIXct(strptime(dm$Day, format="%Y-%m-%d"))
plot(as.Date(dm$day),dm$visits)
axis.Date(1,Day,at=seq(as.Date("2010/10/30"), as.Date("2011/01/29"),by="days"))
Me gusta ggplot
también.
Aquí hay un ejemplo:
df1 = data.frame(
date_id = c(''2017-08-01'', ''2017-08-02'', ''2017-08-03'', ''2017-08-04''),
nation = c(''China'', ''USA'', ''China'', ''USA''),
value = c(4.0, 5.0, 6.0, 5.5))
ggplot(df1, aes(date_id, value, group=nation, colour=nation))+geom_line()+xlab(label=''dates'')+ylab(label=''value'')
Me gusta usar ggplot2
para este tipo de cosas:
df$Date <- as.Date( df$Date, ''%m/%d/%Y'')
require(ggplot2)
ggplot( data = df, aes( Date, Visits )) + geom_line()
Puede rotar las fechas pirateando las notaciones de los ejes con texto ()
Lines <- "Date Visits
11/1/2010 696537
11/2/2010 718748
11/3/2010 799355
11/4/2010 805800
11/5/2010 701262
11/6/2010 531579
11/7/2010 690068
11/8/2010 756947
11/9/2010 718757
11/10/2010 701768
11/11/2010 820113
11/12/2010 645259"
dm <- read.table(textConnection(Lines), header = TRUE)
dm$Date <- as.Date(dm$Date, "%m/%d/%Y")
plot(Visits ~ Date, dm, xaxt = "n", type = "l")
axis(1,at=NULL, labels=F)
text(x = dm$Date, par("usr")[3]*.97, labels = paste(dm$Date,'' ''), srt = 45, pos = 1, xpd = TRUE,cex=.7)
Tu código tiene muchos errores.
- Estás mezclando
dm$Day
ydm$day
. Probablemente no es lo mismo - Sus encabezados de columna son
Date
yVisits
. Entonces tendrías acceso a ellos (supongo) comodm$Date
ydm$Visits
- En el campo de fecha, tiene
%Y-%m-%d
esto debe ser%m/%d/%Y
El siguiente código debe trazar lo que desea:
dm$newday = as.Date(dm$Date, "%m/%d/%Y")
plot(dm$newday, dm$Visits)
1) Como los tiempos son fechas, asegúrese de usar la clase "Date"
, no "POSIXct"
o "POSIXlt"
. Consulte R News 4/1 para obtener consejos e intente esto donde Lines
se define en la Nota al final. No se usan paquetes aquí.
dm <- read.table(text = Lines, header = TRUE)
dm$Date <- as.Date(dm$Date, "%m/%d/%Y")
plot(Visits ~ Date, dm, xaxt = "n", type = "l")
axis(1, dm$Date, format(dm$Date, "%b %d"), cex.axis = .7)
El uso de text = Lines
es solo para mantener el ejemplo autocontenido y en realidad sería reemplazado por algo como "myfile.dat"
. (continúa después de la imagen)
2) Dado que se trata de una serie temporal, es posible que desee utilizar una representación de serie temporal que proporcione un código ligeramente más simple:
library(zoo)
z <- read.zoo(text = Lines, header = TRUE, format = "%m/%d/%Y")
plot(z, xaxt = "n")
axis(1, dm$Date, format(dm$Date, "%b %d"), cex.axis = .7)
Dependiendo de cómo quiera que se vea la trama, puede ser suficiente utilizar el plot(Visits ~ Date, dm)
en el primer caso o el plot(z)
en el segundo caso, suprimiendo por completo el comando del axis
.
Nota:
Lines <- "Date Visits
11/1/2010 696537
11/2/2010 718748
11/3/2010 799355
11/4/2010 805800
11/5/2010 701262
11/6/2010 531579
11/7/2010 690068
11/8/2010 756947
11/9/2010 718757
11/10/2010 701768
11/11/2010 820113
11/12/2010 645259"