Bug Report: go.Surface doesn't show the outthrust value!
まだ誰も着手していません。
- 主要言語
- Python
- スター
- 18.8k
- フォーク
- 2.8k
- 平均マージ
- 16時間 26分
- マージ済み PR(30日)
- 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 にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
調査の方向性
まず、NaN でマスクされた surfacecolor 値に対する go.Surface の動作を調べ、go.Contour のエントリーポイントと比較します。提示された X、Y、Contour_Val の例を再現し、その後、矩形の非 NaN 領域を必要とせずに outthrust 値が平面上にレンダリングされることを確認します。
索引モデルが issue の本文から書いたものです。
評価
- 技術スタック
- python
- 領域
- data-visualization
- issue の種類
- バグ
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 活発さ
- 停滞
- 明瞭さ
- おおむね明確
- 初心者へのやさしさ
- 25/100