plotly / plotly/plotly.py

go.Scatter3d doesn't display a given tensor

Ouverte
#4,507 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

bug P3 sev-2
Langage dominant
Python
Étoiles
18.8k
Forks
2.8k
Merge moyen
16 h 26 min
PR mergées (30 j)
21

Description

Issue

While plotting an np.ndarray of type fp64, it is not displayed.
It is so funny that we could reproduce it only for one specific array.

Thigs that make the script work:

  • If we add epsilon (as in the commented line), then the pointcloud is displayed properly.
  • If we cast to fp32 it works.
  • If we add a small value (0.000000000001 for example), it works.

Things that doesn't work:

  • If we add or substract big values, like 0.4, 1 or 2, it doesn't work
  • If we substract epsilon, it doesn't work
  • if we add numbers larger than 0.000000000001, it doesnt' work even if tehy are small (0.000001 for example)

Environment

We tried this (and reproduced in at least 2 computers) with numpy 1.26.3 and plotly 5.18.0 on ubuntu 22

import numpy as np
import plotly.graph_objects as go

init = np.array(
    [
        [
            -0.063,
            -0.063,
            0.0,
        ],
        [
            -0.063,
            -0.021,
            0.0,
        ],
        [
            -0.063,
            0.021,
            0.0,
        ],
        [
            -0.063,
            0.063,
            0.0,
        ],
        [
            -0.021,
            -0.021,
            0.0,
        ],
        [
            -0.021,
            -0.063,
            0.0,
        ],
        [
            -0.021,
            0.021,
            0.0,
        ],
        [
            -0.021,
            0.063,
            0.0,
        ],
        [
            0.021,
            -0.063,
            0.0,
        ],
        [
            0.021,
            -0.021,
            0.0,
        ],
        [
            0.021,
            0.021,
            0.0,
        ],
        [
            0.021,
            0.063,
            0.0,
        ],
        [
            0.063,
            -0.063,
            0.0,
        ],
        [
            0.063,
            -0.021,
            0.0,
        ],
        [
            0.063,
            0.021,
            0.0,
        ],
        [
            0.063,
            0.063,
            0.0,
        ],
    ]
)

rot_mat = [
    [4.93038066e-32, -1.00000000e00, 2.22044605e-16],
    [2.22044605e-16, 2.22044605e-16, 1.00000000e00],
    [-1.00000000e00, 0.00000000e00, 2.22044605e-16],
]

transformed = (rot_mat @ init.T).T + np.array([0.5, 0.5, 0.5])


x, y, z = 0, 1, 2
idx = list(transformed.shape).index(3)
if idx < 0:
    raise ValueError("Array must be [X,Y,Z] x N")
elif idx == 1:
    array = transformed.transpose()

default_kwargs = dict(
    mode="markers",
    marker=dict(size=3, color="black"),
)

print(array.dtype)

# array[y]+=np.finfo(np.float64).eps
print(array.dtype)
print(array)
plot = go.Scatter3d(x=array[x], y=array[y], z=array[z], **default_kwargs)

default_kwargs = dict(
    scene=dict(
        xaxis=dict(title="X", range=[0, 2]),
        yaxis=dict(title="Y", range=[0, 2]),
        zaxis=dict(title="Z", range=[0, 2]),
    ),
)
layout = go.Layout(**default_kwargs)

fig = go.Figure(data=plot, layout=layout)

fig.show()

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Utilisez le script de reproduction fourni comme point d’entrée et exécutez-le avec numpy 1.26.3 et plotly 5.18.0 sur Ubuntu 22. Comparez le tableau fp64 en échec avec les variantes epsilon et fp32 fonctionnelles, puis suivez le chemin de rendu de go.Scatter3d. Le travail est terminé lorsque la cause a été identifiée et qu’une vérification de régression montrant que le tenseur fourni est affiché a été ajoutée.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
numpy, plotly, python
Domaine
data-visualization
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
38/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.