IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

Série temporelle et représentation graphique


Sujet :

R

  1. #1
    Membre à l'essai
    Femme Profil pro
    Scientifique
    Inscrit en
    Février 2017
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Scientifique

    Informations forums :
    Inscription : Février 2017
    Messages : 11
    Points : 10
    Points
    10
    Par défaut Série temporelle et représentation graphique
    Bonjour à tous!

    J'aimerais trouver une façon simple et reproductible de représenter graphiquement des séries temporelles.
    J'ai extrait les variables d'un fichier, pour en faire un tableau à 2 colonnes, dates et températures (class factor pour le moment).
    Ce que je souhaite faire est une représentation graphique simple que mes températures en ordonnée et de mes dates en abscisse.
    J'aimerais aussi pouvoir sélectionner la fourchette de temps sur laquelle je représente ma série temporelle ensuite.
    J'ai essayé de représenter tout cela dans mon script, mais le résultat ne convient pas.
    J'ai essayé plusieurs combinaisons avec/sans changer le format des variables (les dates en format date ou factor) mais il y a toujours un soucis dans mon plot final.
    Je sens que je touche au but et que cela doit être quelque chose de relativement simple, mais je bloque un petit peu...
    Pouvez-vous m'aiguiller pour trouver ce qui cloche ?
    Merci beaucoup !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    #Repertoire de travail
    setwd("XXX")
     
    #Packages nécessaires
    library(ncdf4)
    library(stringr)
    library(Rcpp)
    library(plyr)
    library(lubridate)
    library(ggplot2)
     
    #Ouverture du fichier
    nc <-nc_open("NOAA_SST_2017_Corse.nc")
     
    #Variables
    lon <- ncvar_get(nc, "lon")
    dim(lon)
    [1] 5
    lat <- ncvar_get(nc, "lat")
    dim(lat)
    [1] 337
    time1 = ncvar_get(nc, "time")
    time = as_date(time1,tz="UTC",origin = "1800-01-01")
    dim(time)
    [1] 365
    head(time)
    [1] "2017-01-01" "2017-01-02" "2017-01-03" "2017-01-04" "2017-01-05" "2017-01-06"
     
    #Zoom géographique 
    lonIdx <- which( lon >= 8.4 & lon <= 9.7)
    latIdx <- which( lat >= 41.3 & lat <= 43.1)
    levelIdx <- 1:length(time)
     
    #Construction du dataframe
    data_temp<-ncvar_get(nc, "sst")[lonIdx, latIdx, levelIdx]
    indices <- expand.grid(lon[lonIdx], lat[latIdx], time[levelIdx])
    df <- data.frame(cbind(indices, as.vector(data_temp)))
    colnames(df)<-c("longitude","latitude","time","temperature")
     
    > head(df)
      longitude latitude       time temperature
    1     8.625   41.375 2017-01-01       16.33
    2     8.875   41.375 2017-01-01       16.15
    3     9.125   41.375 2017-01-01       15.91
    4     9.375   41.375 2017-01-01       15.37
    5     9.625   41.375 2017-01-01       15.00
    6     8.625   41.625 2017-01-01       16.60
     
    ##moyenne par jour
    Final1 <- tapply(df2$temperature,df2$time,mean)
    Final1 = as.data.frame(Final1)
    View(Final1)
    colnames(Final1) = "temperature"
    Final2 = as.data.frame(cbind("time"=rownames(Final1),"temperature"=Final1$temperature))
    Final2
    head(Final2)
    > head(Final2)
            time      temperature
    1 2017-01-01 15.8831814852628
    2 2017-01-02 15.8099995959889
    3 2017-01-03 15.8504542437467
    4 2017-01-04 15.8649997711182
    5 2017-01-05 15.7299998023293
    6 2017-01-06  15.457726912065
     
    #verification du type de données
    class(Final2$temperature)
    [1] "factor"
    class(Final2$time)
    [1] "factor"
     
    #modification de l'intitulé des variables
    names(Final2)[1]<-"jour"
    names(Final2)[2]<-"temp"
     
    #changement du type de données (vers type chaine de caractères)
    Final2$temp<-as.character(Final2$temp)
     
    ##Final2$temp<-sub(" ","",Final2$temp)
    ##changement du type de données (vers type numérique)
    Final2$temp<-as.numeric(Final2$temp)
    class(Final2$temp)
    [1] "numeric"
     
    class(Final2$jour)
    [1] "factor"
    Ci-dessous le code pour mon 1e test de représentation graphique de la série temporelle, j'ai beau faire varier frequency, je n'obtiens pas ce que je veux, exemple ci-dessous :

    Nom : test_plot_1.jpg
Affichages : 447
Taille : 53,4 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #test plot série temporelle 1
    ts.stt<-ts(data = Final2$temp, start=c(2017,04), frequency = 365.25)
     
    #graphique
    library(itsmr)
    windows()
    plotc(ts.stt)
    Enfin ci-dessous, un autre plot que j'ai testé, idem je ne suis pas satisfaite évidemment par l'axe des abscisses et j'aimerais trouver un moyen de sélectionner une fenêtre temporelle (par exemple de la date 2017-04-01 à la date 2017-04-30).



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    plot(Final2$jour,Final2$temp)
    Nom : test_plot_2.jpg
Affichages : 417
Taille : 60,6 Ko

  2. #2
    Membre du Club
    Homme Profil pro
    Formateur et consultant R
    Inscrit en
    Juin 2020
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formateur et consultant R
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2020
    Messages : 36
    Points : 69
    Points
    69
    Par défaut
    Bonjour,

    Je vous recommande d'utiliser {ggplot2} pour votre graphique. Si la colonne de date est formatée comme une date (vous avez utilisé "as_date()"), alors ggplot va reconnaître directement le format et tenter un affichage plus lisible.
    Regardez l'exemple reproductible ci-dessous.
    Par ailleurs, vous pouvez ajouter des paramètres dans "scale_x_date()" qui permettent de choisir le pas à afficher, l'étendue des données, ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    library(ggplot2)
     
    # Exemple reproductible
    Final2 <- data.frame(
      time = seq.Date(as.Date("2017-01-01"), as.Date("2017-01-30"), by = "1 day"),
      temperature = sort(rnorm(30, 25, 5))
    )
     
     
    ggplot(Final2) +
      aes(x = time, y = temperature) +
      geom_point() +
      scale_x_date()

    Nom : Rplot.png
Affichages : 405
Taille : 5,8 Ko

    <sup>Created on 2020-06-23 by the [reprex package](https://reprex.tidyverse.org) (v0.3.0)</sup>

Discussions similaires

  1. Graphique - Série temporelle en abscisse type "Chronomètre"
    Par Gazelle Arctique dans le forum MATLAB
    Réponses: 17
    Dernier message: 25/01/2014, 17h31
  2. Représentation graphique d'une série de fonction
    Par wintercold dans le forum MATLAB
    Réponses: 3
    Dernier message: 11/04/2008, 21h50
  3. [ODBC] Affichage (représentation) graphique d'une base
    Par Atchoum_002 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 19/09/2005, 15h34
  4. Représentation graphique
    Par libititi dans le forum Composants VCL
    Réponses: 5
    Dernier message: 31/05/2005, 11h05
  5. [conseil logiciel] Représentation graphique d'une BDD
    Par ShinJava dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 27/02/2005, 08h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo