Bug Report: go.Surface doesn't show the outthrust value!
还没有人认领这个 Issue。
- 主要语言
- Python
- 星标
- 18.8k
- 派生
- 2.8k
- 平均合并
- 16 小时 26 分钟
- 30 天内合并 PR
- 21
描述
I'm coming to report another bug on the go.Surface.
As the code shown below, you can easily get the bug.
The plotly go.Surface only plots the Contour_Val in rectangular shape. It completely ignores those outthrust values in the 'Contour_Val' matrix.
The Matplotlib shows the correct surface(or contour).
import numpy as np
X=np.array([
[7800., 7900., 8000., 8100., 8200., 8300., 8400., 8500.],
[7800., 7900., 8000., 8100., 8200., 8300., 8400., 8500.],
[7800., 7900., 8000., 8100., 8200., 8300., 8400., 8500.],
[7800., 7900., 8000., 8100., 8200., 8300., 8400., 8500.],
[7800., 7900., 8000., 8100., 8200., 8300., 8400., 8500.],
[7800., 7900., 8000., 8100., 8200., 8300., 8400., 8500.],
[7800., 7900., 8000.00, 8100.00, 8200., 8300., 8400., 8500.],
[7800., 7900.00, 8000.00, 8100., 8200., 8300., 8400., 8500.],
[7800., 7900., 8000.00, 8100., 8200., 8300., 8400., 8500.],
[7800., 7900., 8000., 8100., 8200., 8300., 8400., 8500.],
[7800., 7900., 8000., 8100., 8200., 8300., 8400., 8500.]])
Y=np.array([
[3800., 3800., 3800., 3800., 3800., 3800., 3800., 3800.],
[3900., 3900., 3900., 3900., 3900., 3900., 3900., 3900.],
[4000., 4000., 4000., 4000., 4000., 4000., 4000., 4000.],
[4100., 4100., 4100., 4100., 4100., 4100., 4100., 4100.],
[4200., 4200., 4200., 4200., 4200., 4200., 4200., 4200.],
[4300., 4300., 4300., 4300., 4300., 4300., 4300., 4300.],
[4400., 4400., 4400.00, 4400.00, 4400., 4400., 4400., 4400.],
[4500., 4500.00, 4500.00, 4500., 4500., 4500., 4500., 4500.],
[4600., 4600., 4600.00, 4600., 4600., 4600., 4600., 4600.],
[4700., 4700., 4700., 4700., 4700., 4700., 4700., 4700.],
[4800., 4800., 4800., 4800., 4800., 4800., 4800., 4800.]])
Contour_Val= np.array([
[ np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan],
[ np.nan, np.nan, np.nan, 12169.04428749, np.nan, np.nan, np.nan, np.nan],
[ np.nan, np.nan, np.nan, 12128.33946596, 12114.37604446, np.nan, np.nan, np.nan],
[ np.nan, np.nan, 12146.50058674, 12110.75061221, 12094.0645444 , np.nan, np.nan, np.nan],
[ np.nan, np.nan, 12154.96379352, 12116.42568321, np.nan, np.nan, np.nan, np.nan],
[ np.nan, np.nan, 12186.79247811, 12145.38853514, np.nan, np.nan, np.nan, np.nan],
[ np.nan, np.nan, 12241.85245564, 12197.51679624, np.nan, np.nan, np.nan, np.nan],
[ np.nan, 12385.14869121, 12319.78169639, np.nan, np.nan, np.nan, np.nan, np.nan],
[ np.nan, np.nan, 12419.96884955, np.nan, np.nan, np.nan, np.nan, np.nan],
[ np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan],
[ np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan, np.nan]])
# %% matplotlib version
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1,1,1, projection='3d')
ax.set_proj_type('ortho')
ax.axis('equal')
surf = ax.contourf(X, Y, Contour_Val, zdir='z',
offset=50, # plot at z=offset
cmap='jet')
ax.set_xlim([X.min(), X.max()])
ax.set_ylim([Y.min(), Y.max()])
ax.set_zlim([0, 100])
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.view_init(elev=90, azim=0)
# show the figure
plt.show()
# %% plotly version
'''
bug: the outthrust values are not plotted!
'''
import plotly.graph_objects as go
plotz=50
Z=np.full_like(Contour_Val, plotz)
mask = np.isnan(Contour_Val) # mask for NaN values
Z[mask]=np.nan # apply mask to Z
fig = go.Figure()
fig.add_trace( go.Surface(
x=X.round(2),
y=Y.round(2),
z=Z.round(2),# plot contour on the plane z=plotz
surfacecolor=Contour_Val, # use Contour_Val as the surface color
text=Contour_Val.round(2),
name='contour',
colorscale='jet',
showscale=True,
opacity=0.8, # <1 to make the contour plane semi-transparent
hoverinfo='x+y+text+name', # works well
))
fig.show()
Matplotlib version (correct):
Plotly version (wrong):
only those values which form a regular rectangular shape in the matrix are effective in go.Surface plot:
Solution suggestion:
Either modify the go.Surface or the go.Contour to make it possible to plot the 2D contour on any plane in a 3D figure.
Hope this issue can be solved together with [#5157] soon. Thanks!
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
首先检查 go.Surface 对 NaN 掩码 surfacecolor 值的行为,并将其与 go.Contour 入口进行比较。重现所提供的 X、Y 和 Contour_Val 示例,然后验证 outthrust 值可以在平面上渲染,而不需要矩形的非 NaN 区域。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- python
- 领域
- data-visualization
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 25/100