plotly / plotly/plotly.py

Bug Report: go.Surface doesn't show the outthrust value!

Đang mở
#5,229 6 bình luận 2 reaction 0 người được giao Xem trên GitHub

Chưa có ai nhận issue này.

bug P1
Ngôn ngữ chính
Python
Star
18.8k
Fork
2.8k
Merge trung bình
16 giờ 26 phút
Pull request đã merge (30 ngày)
21

Mô tả

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):

Image

Plotly version (wrong):

Image

only those values which form a regular rectangular shape in the matrix are effective in go.Surface plot:

Image

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!

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Hướng nghiên cứu

Bắt đầu bằng cách kiểm tra hành vi của go.Surface đối với các giá trị surfacecolor bị che bằng NaN và so sánh với điểm vào go.Contour. Tái hiện ví dụ X, Y và Contour_Val được cung cấp, sau đó xác minh rằng các giá trị outthrust được kết xuất trên mặt phẳng mà không yêu cầu một vùng hình chữ nhật không có NaN.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
python
Lĩnh vực
data-visualization
Loại issue
Lỗi
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
25/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.