graph_objs.volume and .isosurface not rendering non-cuboid
還沒有人認領這個 Issue。
- 主要語言
- Python
- 星號
- 18.8k
- 分支
- 2.8k
- 平均合併
- 16 小時 26 分鐘
- 30 天內合併 PR
- 21
描述
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
貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
研究方向
重現所提供的 plotly_express.scatter_3d 和 go.Volume 範例,包括完整資料集和缺失點資料集。從 go.Volume 和 go.Isosurface 進入點開始,比較它們在剪切座標和缺失點情況下的行為。Done 應確認這些輸入是否受到支援,並解決或清楚記錄觀察到的渲染限制。
由索引模型根據 Issue 內容生成。
評估
- 技術堆疊
- python
- 領域
- data-visualization
- Issue 類型
- 缺陷
- 難度
- 4/5
- 預估耗時
- 3-5 天
- 活躍度
- 停滯
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100