[PYTHON] Remarques sur ce qu'il faut faire lorsque l'effacement des ombres ne fonctionne pas avec scatter () / scatter3d () de matplotlib

Lors de la création d'un diagramme de dispersion 3D, lors de la transmission d'une liste de valeurs pour le jeu de couleurs à scatter (), l'élimination de la surface masquée se passe mal.

Première conclusion: j'ai renoncé à passer les données de pulvérisation dans list et scatter () une par une pour résoudre le problème.


Lors de l'utilisation de la méthode de dessin en nuage scatter () Je souhaite généralement transmettre la position du marqueur et la valeur de codage couleur dans une liste.

Liste xs,ys,zs,En passant vs


ax.scatter(xs, ys, zs, c=vs, norm=norm, s=600, marker='o', alpha=1.0, zdir='z', depthshade=False )

Cependant, pour une raison quelconque, dès que j'ai passé le schéma de couleurs avec c = vs, l'effacement de la surface cachée est devenu fou. Il arrive que le marqueur le plus en avant soit caché derrière le marqueur le plus à l'intérieur et ne puisse pas être vu. (Cela dépend peut-être de la version.)


Action: Après avoir essayé tout ce à quoi je peux penser C'était normal quand je définissais "scatter () un marqueur à la fois dans l'instruction for".

Scatter pour chacun()


ax = fig.add_subplot( 122, projection='3d')
for x,y,z,v in zip(xs,ys,zs,vs):
    ax.scatter(x, y, z, c=(v,),norm=norm, s=600, marker='o', alpha=1.0, zdir='z', depthshade=False )

Ce qui suit est un exemple:

Effacement de la comparaison


def plot():
    def randrange(n, vmin, vmax):
        return (vmax - vmin)*np.random.rand(n) + vmin

    n = 20
    xs = randrange(n, 0, 100)
    ys = randrange(n, 0, 100)
    zs = randrange(n, 0, 100)
    vs = xs
    norm = Normalize(vmin=min(vs), vmax=max(vs) )
    
    fig = plt.figure()
    ax = fig.add_subplot(121, projection='3d')
    ax.scatter(xs, ys, zs, c=vs, norm=norm, s=600, marker='o', alpha=1.0, zdir='z', depthshade=False )
    ax.set_xlabel('X')
    ax.set_ylabel('Y')
    ax.set_zlabel('Z')
    
    ax = fig.add_subplot( 122, projection='3d')
    for x,y,z,v in zip(xs,ys,zs,vs):
        ax.scatter(x, y, z, c=(v,),norm=norm, s=600, marker='o', alpha=1.0, zdir='z', depthshade=False )

    ax.set_xlabel('X')
    ax.set_ylabel('Y')
    ax.set_zlabel('Z')

    plt.show()

Résultat de l'exécution Python3.8 ↓ 3DPlotColoring_compare.png

↑ Lorsque le chiffre de gauche est passé sous forme de liste et que le chiffre de droite est passé un par un. (J'avais l'intention de dessiner dans une direction facile à distinguer)

La figure de droite est normale.

point important:

    1. Lors de l'appel de scatter () pour chaque marqueur, afin d'unifier la gamme de coloration Fixez la plage avec norm = Normaliser et passez-la à scatter () avec norm = norm.
  1. L'option scatter () "depthshade = True" est très lente. Il semble être Vrai par défaut, assurez-vous donc de définir "Depth Shade = False".

Recommended Posts

Remarques sur ce qu'il faut faire lorsque l'effacement des ombres ne fonctionne pas avec scatter () / scatter3d () de matplotlib
Procédures à suivre lorsque le japonais n'est pas affiché dans matplotlib
Que faire si Python3 Venv ne fonctionne pas bien sur Raspberry Pi
Exemple de ce qu'il faut faire lorsque l'exemple de script ne fonctionne pas (OpenCV-Python)
Que faire lorsque le graphique n'apparaît pas sur le notebook Jupyter (IPython)
[EC2] Que faire lorsque le sélénium est bloqué et que le traitement ne se poursuit pas
Que faire si sys / cdefs.h n'existe pas
Que faire lorsque "Erreur de type: doit être _socket.socket, pas socket" apparaît dans GAE
Que faire si `pip install matplot lib` échoue sur Mac
Que faire si Jupyter Notebook sur WSL ne démarre pas automatiquement dans le navigateur
Que faire quand Ubuntu plante
LocateCenterOnScreen ne fonctionne pas sur PyAutoGui
Que faire si Python ne fonctionne pas sur Git pour Windows
Que faire lorsque les paramètres de l'extension jupyterlab ne sont pas reflétés
Lorsque le programme pip installé sur Mac / Marvericks ne fonctionne pas
[Débutant] Que faire lorsque "[Errno 2] Le fichier b'test.csv 'n'existe pas: b'test.csv" s'affiche lors de la lecture du csv des pandas
[virtualbox] Que faire lorsque [Impossible de récupérer la liste des miroirs] apparaît lorsque la mise à jour yum est effectuée sur CentOS7
Virtualenv ne fonctionne pas sur Python 3.5 (Windows)
Que faire si l'installation de pyenv ne se poursuit pas avec une erreur
Que faire si vous obtenez "La session n'a pas pu être ouverte" lors de l'installation de CentOS sur VirtualBox
[Mac OS] Que faire lorsque Python n'est pas installé en tant que framework S'affiche lors de l'importation de matplot lib.
Que faire lorsque vous vous fâchez que libxml / xmlversion.h n'existe pas lorsque vous mettez lxml avec pip
J'ai réussi à résoudre la situation où Python ne fonctionne pas sur Mac
Que faire si CERTIFICATE_VERIFY_FAILED se produit lorsque nltk.download () est effectué sur macOS pyhon
Que faire si «TypeError: must be string, not int…» apparaît lors de l'utilisation de strptime
Que faire si les rails ne fonctionnent pas
Que faire si Scrapy ne fonctionne pas après l'installation de Scrapy avec PIP sur Mac
Jinja2 2.9.6 ne fonctionne pas sur la série Lambda Python 3
Que faire lorsque "TypeError: type de données non compris" apparaît dans numpy.zeros de python
Que faire si l'autocomplete-python d'atome ne fonctionne pas
Lorsque la spécification générique ne fonctionne pas avec pylint
Que faire si le support japonais n'est pas complètement installé sur Ubuntu 16.04
Que faire lorsque matplotlib se fâche contre CentOS en disant "J'utilise Agg donc je ne peux pas émettre de chiffre"
Que faire si vous obtenez l'erreur "Erreur: opencv3: Ne prend pas en charge la construction des wrappers Python 2 et 3" lors de l'installation d'openCV 3
[Python] Erreur de type: l'objet 'WebElement' n'est pas itérable Que faire lorsqu'une erreur se produit
Que faire quand n'est pas dans le fichier sudoers. Cet incident sera signalé.
Que faire si vous obtenez une erreur lors de l'importation de matplotlib en Python (Mac)
Que faire si vous ne voyez pas IntelliSense de Python dans VS Code sous Windows
Que faire si vous obtenez une erreur d'importation lors de l'importation de matplotlib avec Jupyter
Que faire lorsque Python ne passe pas de la version système dans pyenv
Que faire si vous obtenez l'erreur ʻERR_FEATURE_UNAVAILABLE_ON_PLATFORM` lors de l'utilisation de ts-node-dev sous Linux
[Go 1.13] Que faire lorsque la disposition de répertoire inattendue: apparaît
[openpyxl] Que faire lorsque IllegalCharacterError apparaît dans pandas.DataFrame.to_excel
curl: (60) Que faire lorsque le certificat de l'émetteur n'est pas valide.
Que faire lorsque gdal_merge génère un fichier énorme
Commande lorsque l'arrêt de l'ACPI ne fonctionne pas dans VirtualBox
Que faire lorsque "impossible d'importer le nom xxx" [Python]
Que faire si pyenv n'est pas activé (zsh)
[Petite histoire] Que faire si "Erreur avec le processus enfant: création de resource'awsToolkitSamLocalResource '" ne fonctionne pas lorsque Lambda est exécuté localement par SAM à partir de VS Code
Le traitement parallèle de Python joblib ne fonctionne pas dans l'environnement uWSGI. Comment traiter en parallèle sur uWSGI?
Que faire lorsque vous obtenez une erreur indiquant «Échec temporaire de la résolution du nom» sous Linux
Que faire si l'image n'est pas affichée à l'aide de matplotlib etc. dans le conteneur Docker
Que faire lorsqu'un artefact manquant se produit dans un fichier jar qui n'est pas défini dans pom.xml
[AWS] Que faire lorsque vous souhaitez piper avec Lambda