Как нарисовать несколько квадратов на разных высотах в 3D-графике - PullRequest
1 голос
/ 19 сентября 2019

Я пытаюсь нарисовать квадраты площади 1, параллельные плоскости ху на разных высотах в трехмерном графике.Я могу сделать это для точек, которые в основном разбросаны, и код выглядит так:

A=np.array([[213,254,245,217,198],[245,201,211,249,200],[211,189,32,212,227],[250,234,217,243,188],[222,243,212,209,199]])
points={}
for i in range(5):
    for j in range(5):
        points[i*5+j]={'x':i,'y':j,'z':A[i][j]}


data=pd.DataFrame(points)
data1=pd.DataFrame.transpose(data)
fig = px.scatter_3d(data1,x='x', y='y', z='z')
fig.show()

enter image description here

Я также могу нарисовать отрезки линий, которыепараллельны плоскости xy на разных высотах:

enter image description here

Это 0-каркас и 1-каркас матрицы A. Теперь мне нужноНарисуйте 2 скелета, который представляет собой несколько квадратов на разных высотах.Я пытался использовать go.Surface, но эти поверхности покрывают все пространство, и они пересекаются друг с другом.То, что мне нужно, это фрагменты области 1, которые являются дискретными, проекция которых представляет собой матрицу А, или в оттенках серого она выглядит следующим образом: enter image description here

1 Ответ

1 голос
/ 21 сентября 2019

Вы можете добавить много маленьких квадратных поверхностей, например:

import plotly.graph_objects as go

def add_hovering_square(fig, x0, y0, size, height):
    fig.add_trace(go.Surface(
        z=[[height,height],[height,height]],
        x=[x0,x0+size], y=[y0,y0+size],
        coloraxis='coloraxis1'
    ))

fig = go.Figure()

add_hovering_square(fig, 1, 1, 1, 1)
add_hovering_square(fig, 1, 2, 1, 2)
add_hovering_square(fig, 2, 1, 1, 3)
add_hovering_square(fig, 2, 2, 1, 4)

fig.show()

enter image description here

...