plotly / plotly/plotly.py

graph_objs.volume and .isosurface not rendering non-cuboid

Aperta
#3,933 6 commenti 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

bug P3
Lingua principale
Python
Stelle
18.8k
Fork
2.8k
Merge medio
16h 26m
PR unite (30g)
21

Descrizione

I'm trying to use plotly in a dash app to render a cuboid, that's sheared to the y-axis.=it has a parallelogram as ground surface. It consists of individual points, each with a density value. plotly_express.scatter_3d renders the individual points correctly, but only has "2 views" when rotating it:

  • One where the closest face is rendered
  • -> you can't look inside very well
  • One where both the closest face and the inside of the structure are not rendered
  • -> you can only see the 2 rear side faces, but from the inside

With both, I'm losing a lot of information on the insides of my structure.
I think scatter_3d doesn't allow for

  • a) all points to stay rendered at all times
  • b) me to link each individual points opacity to its density value (like it does with color)¹

Best looking solution would be graph_objs.Volume or .isosurface, but they have an issue.

So far, the coordinates data had to be arranged to form an orthogonal cuboid, to render a volume.
My test data is not the same y-sheared cuboid I want to achieve, but it illustrates the issue of both graph_objs.

Test Data:
Using plotly_express.scatter_3d() for comparison, the following dataframe shows both Figures rendering the expected result:

DF = pd.DataFrame(data={
    'x': [0, 0, 0, 0, 0, 0, 1,1,1,1,1,1],
    'y': [0,0,0,1,1,1,0,0,0,1,1,1],
    'z': [0,1,2,0,1,2,0,1,2,0,1,2],
    'val': [1,1,1,1,1,1,1,1,1,1,1,1]})

scatter plot:
points

volume plot:
points volume

When removing 2 points at (0/1/2) & (1/1/2) -

DF = pd.DataFrame(data={
    'x': [0, 0, 0, 0, 0, 1,1,1,1,1],
    'y': [0,0,0,1,1,0,0,0,1,1],
    'z': [0,1,2,0,1,0,1,2,0,1],
    'val': [1,1,1,1,1,1,1,1,1,1]})
  • go.Volume breaks.

scatter plot:
scattermissing

volume plot:
vol missing

scatter_3d figure:

px.scatter_3d(
    DF,
    x='x',
    y='y',
    z='z',
    color='val',
    opacity=0.5,
    color_continuous_scale=px.colors.sequential.Inferno_r,
    range_color=[df.min()['val'], df.max()['val']],
    template=templ)

opacity doesn't take lists/ranges, so I can't use DF.val there.

Volume figure:

go.Figure(data=go.Volume(
    x=DF.x,
    y=DF.y,
    z=DF.z,
    value=DF.val,
    opacity=0.3,
    surface_count=17,
    colorscale=px.colors.sequential.Inferno_r
))

I played around with surface_count, but it doesn't seem to be causing the problem.

My 2 points being:

  • go.Volume/.isosurface don't work if angles of !=90° are involved
  • px.scatter_3d deserves some more configuration-options, especially opacity-wise

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Riprodurre gli esempi forniti di plotly_express.scatter_3d e go.Volume, inclusi i dataset completi e i dataset con punti mancanti. Iniziare dagli entry point go.Volume e go.Isosurface e confrontare il loro comportamento con coordinate deformate e punti mancanti. Done deve stabilire se questi input sono supportati e risolvere o documentare chiaramente la limitazione di rendering osservata.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
python
Ambito
data-visualization
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Ferma
Chiarezza
Abbastanza chiara
Idoneità per principianti
35/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.