0
votes

Tracé de dispersion 3D de plusieurs fichiers avec chaque fichier ayant une couleur unique


6 commentaires

Voulez-vous une couleur différente pour chaque fichier ou pour chaque parcelle de dispersion? Est-ce que la boucle pour a, b, c, d dans zip (x, y, z, couleurs): en boucle sur les différents points de l'ensemble des points? Sont, x, y, z 1d gray?


@Liris Si vous regardez la deuxième image, je viens d'ajouter, chaque couleur représente toutes les données de fichier. Chaque couleur est un fichier différent, tracé sur le même tracé de dispersion en 3D. Cela a-t-il du sens?


Quelles sont les dimensions de x, y, z comme vecteurs?


@Liris x [0] .shape == (99937,) , et il y a 16 ndarrays de cette forme dans chaque x liste, qui s'applique à y et z aussi. couleurs.shape == (16,4) , couleurs [0] .Pache == (4,)


Pourriez-vous confirmer que si data = meshio.read (fichier) , alors data.points est un tableau (N, 3) où n est le numéro de point du fichier ?


@Liris confirmée! maillage.points.shape == (99937, 3) , et c'est pour un fichier


4 Réponses :


1
votes

Je pense que vous vous confondez de la liste des mailles que vous mettez à jour à chaque étape. Vous tracez toute la liste des mailles à chaque étape, de sorte que votre premier fichier soit tracé 16 fois, en 16 couleurs différentes.

Le code le plus simple pourrait être: xxx

si vous souhaitez stocker tous les points d'une liste appelée maillage , vous pouvez la modifier comme : xxx

tel que vous ne traitant que les points correspondant au fichier que vous venez de lire à chaque étape.


2 commentaires

TypeError: 'Mesh' L'objet n'est pas syndicalable , aussi je crois que couleurs [Fichiers ... doit être CMAP [Fichiers ...


Désolé, je ne connais certainement pas la bibliothèque Meshio , j'ai oublié de prendre à .Points attributs de l'objet maillage . Et vous aviez raison sur CMAP et couleurs . J'ai corrigé les deux problèmes.



0
votes

Comme cela a été mentionné précédemment, le problème que vous rencontrez est quelle boucle la sélection de la couleur se produit.

color = iter(cm.rainbow(np.linspace(0, 1, len(files))))

for file in files:
    d = next(color) #set the color for each file instead of inside the loop
    mesh.append(meshio.read(file))

    x = [m.points[:, 0] for m in mesh]
    y = [m.points[:, 1] for m in mesh]
    z = [m.points[:, 2] for m in mesh]

    for a,b,c in zip(x,y,z):
        plt.scatter(a,b,c,color=d)


0 commentaires

1
votes

Si vous n'avez pas besoin des mailles de maillage, vous pouvez éviter d'attribuer un tas de mémoire xxx pré>

ou, si vous avez besoin des mailles ensuite, nous pouvons utiliser un conteneur p>

...
meshes = []
colors = iter(cm.rainbow(np.linspace(0, 1, 16)))
for file in files:
    meshes.append(meshio.read(file))
    plt.scatter(*meshes[-1].points.T, c=[next(colors)], label=file)
plt.legend()
plt.show()


4 commentaires

Merci! Quel est le .t dans ce cas?


array.t est la transposition du tableau, il est également défini pour les tableaux multidimensionnels, mais dans le cas simple d'une matrice 2D, il modifie la forme de, disons (m, n) à (n, m) selon cette règle array.t [j, i] = tableau [i, j]


Avez-vous déjà reçu cette erreur: ValueError: ne peut pas remodeler la taille de la taille 259644 dans la forme (93347,3) , sans savoir si je devrais poser une nouvelle question avec elle


Non, ne posez pas une nouvelle question: 93347 * 3 → 280041 ≠ 259644



0
votes

Ce code ci-dessous fonctionne actuellement pour moi, pour la plupart.

J'ai changé plt.Scatter ... à ax.scatter ... et Il a fixé le problème de mise à l'échelle Z-Axe que j'ai mentionné dans EDIT 2 ci-dessus.

J'ai également changé en AX = AXES3D (FIG)

Merci à l'aide de tout le monde! Je vais travailler avec ceci pour l'instant. Entrez la description de l'image ici xxx


0 commentaires