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 :

Interpolation de données pour graph 3d


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    autre
    Inscrit en
    Octobre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2005
    Messages : 135
    Par défaut Interpolation de données pour graph 3d
    Bonjour,

    Voilà bien longtemps que je ne suis pas venu sur les forums de Developpez ! J'ai mis de côté Access, Excel, VBA et autres ETL pour aller prendre l'R... mais aujourd'hui je recherche de l'aide sur ce magnifique outil.

    L'objectif de mon travail est de produire de beaux graphiques en surface 3D ( avec rgl).
    de ce genre là (fait avec un logiciel propriétaire)
    Nom : graph.png
Affichages : 369
Taille : 89,1 Ko

    Mais avant ça je dois travailler sur mes données et notamment faire de l'interpolation. Et c'est là que ça coince !

    La situation: j'ai réalisé des mesures en profondeur dans le sol sur 80 cm (une mesure tous les cm de 0 à 80 cm = 81 résultats) et sur 11 m de large (12 séries de mesures tous les mètres numérotées de 1 à 12).

    En profondeur, la "maille" (1 cm) est très fine, par contre, en largeur je souhaite interpoler (no linéairement) les valeurs tous les 25 cm (au lieu d'1 m).

    Au départ j'ai donc un fichier .csv qui se présente comme ça:

    x y Mesure
    1 0 1.2
    1 1 1.3
    1 2 1.1
    .
    .
    .
    2 0 1.5
    2 1 2.7
    .
    .
    .
    12 80 4.9

    Il y a 12 répétitions de 81 résultats (soit 972 mesures)

    Après interpolation je voudrais quelque chose comme ça:
    (en vert les "ajouts" dans la grille, en rouges les valeurs interpolées)
    x y Mesure
    1 0 1.2
    1 1 1.3
    1 2 1.1
    .
    1.25 0 1.25
    .
    2 0 1.5
    2 1 2.7
    .
    3.75 5 5.6
    .
    12 80 4.9

    Il y aurait 45 séries de 81 valeurs (soit 3645 valeurs)

    Bon le contexte étant posé, je souhaite de l'aide pour utiliser "interp.new"

    Voilà ce que j'ai fait pour l'instant:
    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
    library(akima) #nécessaire pour l'interpolation
     
    #on charge le fichier de données
    # il faut bien sur adapter /chemin_vers_fichier
    Parcelle1_2015 <- read_delim("chemin_vers_fichierl/Parcelle1_2015.csv",";", escape_double = FALSE, col_types = cols(x = col_double(), y = col_double()), trim_ws = TRUE)
     
    # mes x vont de 1 à 12, je crée  une séquence de nombres entre ces 2 valeurs par pas de 0,25 (tous les 25 cm)
    grilleX<-seq(1,12,0.25)
    grilleY<-seq(0,80,1) # je laisse l'intervale de 1cm pour les y
     
    grille_25cm<-expand.grid(x=grilleX,y=grilleY) # je crée une matrice avec toutes les combinaisons de x et y possibles. C'est sur ces points que je vais interpoler
     
    interp_indice<-interp.new(Parcelle1_2015$x,Parcelle1_2015$y,Parcelle1_2015$Mesure,xo = seq(min(Parcelle1_2015$x),max(Parcelle1_2015$x),length = 45),yo = seq(min(Parcelle1_2015$y),max(Parcelle1_2015$y),length = 81),linear = FALSE, ncp = NULL, extrap = FALSE, duplicate = "error",dupfun = NULL)
     
    #jusqu'ici R ne renvoi pas d'erreur
     
    interp_indice_df<-data.frame(x=interp_indice[[1]],y=interp_indice[[2]],Indice=interp_indice[[3]])
    #Mais là ça plante
    #Error in data.frame(x = interp_indice[[1]], y = interp_indice[[2]], Indice = interp_indice[[3]]) : 
     # les arguments impliquent des nombres de lignes différents : 45, 81

    Pouvez-vous m'aider ?

    Merci d'avance !

  2. #2
    Membre confirmé
    Profil pro
    autre
    Inscrit en
    Octobre 2005
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Octobre 2005
    Messages : 135
    Par défaut Nouvelle version mais pas mieux
    j'ai un peu toiletté le code mais sans amélioration

    Déjà, au lieu de travailler sur le CSV je l'importe en Data:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    > P1<- read.csv2("Parcelle1_2015.csv")
    > str(P1)
    'data.frame':	972 obs. of  3 variables:
     $ x     : int  1 1 1 1 1 1 1 1 1 1 ...
     $ y     : int  0 1 2 3 4 5 6 7 8 9 ...
     $ Mesure: num  1 1.03 1.2 1.45 1.68 1.75 1.8 1.8 1.7 1.8 ..
    Ensuite c'est pareil mais je pense que c'est là qu'il y a un problème ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    > library(akima) #nécessaire pour l'interpolation
    > grilleX<-seq(1,12,0.25)
    > grilleY<-seq(0,80,1) # je laisse l'intervale de 1cm pour les y
    > grille_25cm<-expand.grid(x=grilleX,y=grilleY) # je crée une matrice avec toutes les combinaisons de x et y possibles. C'est sur ces points que je vais interpoler
    > interp_indice<-interp.new(P1$x,P1$y,P1$Mesure,xo = seq(min(P1$x),max(P1$x),length = 45),yo = seq(min(P1$y),max(P1$y),length = 81),linear = FALSE, ncp = NULL, extrap = FALSE, duplicate = "error",dupfun = NULL)
    ... car quand je crée le nouveau Data, ça plante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    > interp_indice_df<-data.frame(x=interp_indice[[1]],y=interp_indice[[2]],Indice=interp_indice[[3]])
    #Error in data.frame(x = interp_indice[[1]], y = interp_indice[[2]], Indice = interp_indice[[3]]) : 
    #  les arguments impliquent des nombres de lignes différents : 45, 81

Discussions similaires

  1. Utilisé une variable tiré d'une base de données pour y faire d'un graph
    Par MkcookieFIFO dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 21/04/2009, 11h13
  2. Réponses: 3
    Dernier message: 17/03/2009, 11h41
  3. Choix de base données pour graphes
    Par zakaroh dans le forum Débuter
    Réponses: 2
    Dernier message: 01/05/2008, 03h30
  4. Pb de definition de plage de données pour un graphe
    Par Patnel dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/11/2007, 14h08
  5. Réponses: 3
    Dernier message: 22/06/2006, 17h34

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