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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    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
    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.

  2. #2
    Membre émérite
    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
    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 : 372
Taille : 70,8 Ko

  3. #3
    Membre éprouvé
    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
    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.

  4. #4
    Membre émérite
    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
    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 éprouvé
    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
    Par défaut
    Merci pour ces précisions,
    c'est plus clair comme ça.
    Il faut que je m'y mette vraiment a Numpy.

+ 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