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

Calcul scientifique Python Discussion :

utiliser chaque case d'un bar3d plot. [Python 3.X]


Sujet :

Calcul scientifique Python

  1. #1
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut utiliser chaque case d'un bar3d plot.
    Salut les pythons,

    je n'arrive pas a implémenter un bar3d afin que chaque case de taille égale en X et Y soit remplis.

    Tous ce que j'arrive a faire est d'avoir une diagonal de barres en 3D.

    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
    import numpy as np 
    import matplotlib.pyplot as plt
    from mpl_toolkits.mplot3d import Axes3D
     
    from random import uniform, randint
     
    ###############################################
    # The problem is that i cannot generate bars  #
    # at every square from the display: only at   #
    # the diagonal.                               #
    ###############################################
     
    fig = plt.figure()   
     
    subplot = fig.gca(projection="3d")
     
    X = np.linspace(0, 25, 25)  # Generate 25 points in range 0-25.
    Y = np.linspace(0, 25, 25)  # Generate 25 points in range 0-25.
    Z = np.linspace(0 ,25, 25)  # Generate 25 points in range 0-25.
     
     
     
    dx = []
    dy = []
    dz = []
     
    for v in range(0, 26) :
     
      dx.append(1)  # If i set another value bigger than 1 the bar width,height is not uniform to the scalar.
      dy.append(1)  # If i set another value bigger than 1 the bar width,height is not uniform to the scalar.
     
      dz.append(randint(0,70)) # Setting the bar height.
     
     
     
     
    subplot.bar3d(X, Y, Z, dx, dy, dz)
     
    subplot.set_xticks([])  # X axes values marks.
    subplot.set_yticks([])  # Y axes values marks.
     
     
    plt.show()
    Le problème est que si je change la valeur de dx ou dy les bars sont dégénérer en termes de longueur,largeur...????
    Et donc je n'arrive pas a préciser les coordonnées en X et Y pour les autres cases que la diagonale.

    C'est pourtant l'utilisation la plus logique d'un bar3d: un carrelage de barres en hauteurs, sur toute la surface.

    Toute aide est la bienvenue.
    Merci pour vos réponses éclairés et votre aide précieuse.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  2. #2
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Salut,
    C'est pas clair. Essaie avec ce genre de valeurs si tu veux une barre pour tout le "carrelage" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    N = 5
    X = np.tile(np.linspace(0, N, N), N)
    Y = np.repeat(np.linspace(0, N, N), N)
    Z = np.zeros(N * N)
     
    dx = dy = np.ones_like(Z)
    dz = np.random.random(N * N)
    Nom : bar3d_simple.png
Affichages : 349
Taille : 70,8 Ko

  3. #3
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Merci pour la réponse,

    L'image représentant le code correspond a ce que je voulais faire.
    Seulement ton code ne me parle pas car je connait que très peu de chose a numpy et comme je veux y arriver par mes propres moyens, pourrait tu me fournir des explications.

    En se mettant d'accord sur le prototype suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bar3d(X, Y, Z, dx, dy, dz)
    X = un tableau pour les valeurs compris entre xmin et xmax.
    Y = un tableau pour les valeurs compris entre ymin et ymax.
    Z = un tableau pour les valeurs compris entre zmin et zmax.
    Afin de fixer les limites et les major et minor tickers.

    dx = un tableau de coordonnées pour X (une pour chaque bar).
    dy = un tableau de coordonnées pour Y (une pour chaque bar).
    dz = un tableau de valeurs pour Z (une pour chaque bar) correspondantes aux valeurs de dx et dy.

    Merci de bien vouloir me corriger si je me trompe.

    Si tu le désire bien, merci.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2013
    Messages
    388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2013
    Messages : 388
    Points : 692
    Points
    692
    Par défaut
    Je ne connaissais pas la fonction bar3d avant ton post. La documentation de matplotlib est bien légère.
    Ce que j'ai compris, c'est qu'il faut d'abord fournir 3 tableaux 1D X, Y et Z, correspondants aux coordonnées des points à tracer. Les 3 tableaux suivants dx, dy et dz correspondent aux dimensions du volume à dessiner. Ainsi pour l'axe x, le pavé s'étendra de X à X+dx.

    Les points que tu avais définis étaient tous sur la même droite. J'ai choisi de placer les miens dans le plan Z=0. J'ai défini mes points tels que 0 <= x <= 5, 0 <= y <= 5, avec 5 points entre ces bornes. Pour chaque point, je fixe dx et dy à 1, et je tire pour dz un nombre entre 0 et 1.

    C'est très facile de faire tout ça avec numpy. Pour Z, numpy.zeros fait le travail. numpy.ones_like(Z) crée un tableau de même profil que Z, rempli de 1. Pour les autres, la console permet de voir ça simplement :

    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
    >>> import numpy as np
    >>> N = 5
    >>> v = np.linspace(0, N, N)
    >>> v
    array([ 0.  ,  1.25,  2.5 ,  3.75,  5.  ])
    >>> X = np.tile(v, N)
    >>> X
    array([ 0.  ,  1.25,  2.5 ,  3.75,  5.  ,  0.  ,  1.25,  2.5 ,  3.75,
            5.  ,  0.  ,  1.25,  2.5 ,  3.75,  5.  ,  0.  ,  1.25,  2.5 ,
            3.75,  5.  ,  0.  ,  1.25,  2.5 ,  3.75,  5.  ])
    >>> Y = np.repeat(v, N)
    >>> Y
    array([ 0.  ,  0.  ,  0.  ,  0.  ,  0.  ,  1.25,  1.25,  1.25,  1.25,
            1.25,  2.5 ,  2.5 ,  2.5 ,  2.5 ,  2.5 ,  3.75,  3.75,  3.75,
            3.75,  3.75,  5.  ,  5.  ,  5.  ,  5.  ,  5.  ])
    >>>

  5. #5
    Membre expérimenté
    Avatar de Luke spywoker
    Homme Profil pro
    Etudiant informatique autodidacte
    Inscrit en
    Juin 2010
    Messages
    1 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant informatique autodidacte

    Informations forums :
    Inscription : Juin 2010
    Messages : 1 077
    Points : 1 742
    Points
    1 742
    Par défaut
    Merci pour ces précisions,
    c'est plus clair comme ça.
    Il faut que je m'y mette vraiment a Numpy.
    Pour faire tes armes:
    Use du présent pour construire ton futur sinon use de ce que tu as appris auparavant.
    Et sois toujours bien armé avant de te lancer.
    Le hasard ne sourit qu'aux gens préparés...
    Site: Website programmation international (www.open-source-projects.net)
    Site: Website imagerie 3D (www.3dreaming-imaging.net)
    Testez aux moins pendant une semaine l'éditeur avec terminaux intégrées it-edit Vous l'adopterai sûrement !
    FUN is HARD WORK !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. debutant besoin de cibler chaque case de ma grille
    Par nassimmm dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 27/07/2006, 19h37
  2. Réponses: 21
    Dernier message: 21/07/2006, 16h55
  3. [Swing] Utilisation de cases à cocher
    Par gids01 dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 25/04/2006, 15h21
  4. Réponses: 24
    Dernier message: 24/11/2005, 10h28
  5. [mySQL] Newbie : Utilisation de CASE
    Par SergeF dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 14/07/2005, 00h39

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