graph_objs.volume and .isosurface not rendering non-cuboid
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- Python
- Estrelas
- 18.8k
- Forks
- 2.8k
- Merge médio
- 16h 26min
- PRs com merge (30d)
- 21
Descrição
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
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Reproduzir os exemplos fornecidos de plotly_express.scatter_3d e go.Volume, incluindo os conjuntos de dados completos e os conjuntos de dados com pontos ausentes. Começar pelos pontos de entrada go.Volume e go.Isosurface e comparar seu comportamento com coordenadas cisalhadas e pontos ausentes. Done deve estabelecer se essas entradas são compatíveis e resolver ou documentar claramente a limitação de renderização observada.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- python
- Domínio
- data-visualization
- Tipo de issue
- Bug
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Estagnada
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 35/100