graph_objs.volume and .isosurface not rendering non-cuboid
Nessuno ha ancora preso questa issue.
- 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:

volume plot:

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:

volume plot:

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
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- 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