Je sais que cette question pourrait être un cliché, mais j'ai du mal à le faire.
J'ai des données dans le format suivant:
Date Visites 01/11/2010 696537 11/2/2010 718748 11/3/2010 799355 04/11/2010 805800 05/11/2010 701262 06/11/2010 531579 07/11/2010 690068 08/11/2010 756947 11/9/2010 718757 11/10/2010 701768 11/11/2010 820113 11/12/2010 645259
Je souhaite créer un graphique chronologique, l’axe des abscisses représentant les vistes de l’axe des temps et des ordonnées. Aussi, je veux marquer l'axe des x avec la date. Le code que j'utilisais est le suivant:
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"))
1) Étant donné que les heures sont des dates, veillez à utiliser la classe "Date"
et non pas "POSIXct"
ou "POSIXlt"
. Voir R News 4/1 pour des conseils et essayez ceci où Lines
est défini dans la note à la fin. Aucun paquet n'est utilisé ici.
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)
L’utilisation de text = Lines
sert simplement à garder l’exemple autonome et, en réalité, il serait remplacé par quelque chose comme "myfile.dat"
. (suite après image)
2) Puisqu'il s'agit d'une série chronologique, vous pouvez utiliser une représentation chronologique donnant un code légèrement plus 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)
Selon l'apparence que vous voulez donner au tracé, il peut suffire d'utiliser simplement plot(Visits ~ Date, dm)
dans le premier cas ou plot(z)
dans le deuxième cas, en supprimant entièrement la commande axis
.
Remarque:
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"
J'aime utiliser le ggplot2
pour ce genre de chose:
df$Date <- as.Date( df$Date, '%m/%d/%Y')
require(ggplot2)
ggplot( data = df, aes( Date, Visits )) + geom_line()
Votre code contient beaucoup d'erreurs.
dm$Day
et dm$day
. Probablement pas la même choseDate
et Visits
. Donc, vous y accéderiez (je suppose) comme dm$Date
et dm$Visits
%Y-%m-%d
cela devrait être %m/%d/%Y
Le code suivant devrait indiquer ce que vous voulez:
dm$newday = as.Date(dm$Date, "%m/%d/%Y")
plot(dm$newday, dm$Visits)
C'est possible dans ggplot et vous pouvez utiliser scale_date pour cette tâche
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")
Vous pouvez faire pivoter les dates en piratant les notations d'axe avec text ()
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)
J'aime aussi ggplot
.
Voici un exemple:
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')