Сюжетный 3D-график с правильным соотношением сторон

соответствующий пост находится здесь: интерактивный 3D-график с правильным соотношением сторон с использованием plotly

Для дальнейшего улучшения мне интересно, как построить рамку контейнера в соответствии с размером корзины, чтобы график мог более четко отображать, сколько свободного места осталось, когда контейнер не заполнен? точно так же, как показано ниже:

Сюжетный 3D-график с правильным соотношением сторон

UPADTE: отрисовка внешней рамки контейнера

def parallelipipedic_frame(xm, xM, ym, yM, zm, zM):
    # defines the coords of each segment followed by None, if the line is
    # discontinuous
    x = [xm, xM, xM, xm, xm, None, xm, xM, xM, xm, xm, None, xm, xm, None, xM, xM,
         None, xM, xM, None, xm, xm]
    y = [ym, ym, yM, yM, ym, None, ym, ym, yM, yM, ym, None, ym, ym, None, ym, ym,
         None, yM, yM, None, yM, yM]
    z = [zm, zm, zm, zm, zm, None, zM, zM, zM, zM, zM, None, zm, zM, None, zm, zM,
         None, zm, zM, None, zm, zM]
    return x, y, z

x, y, z = parallelipipedic_frame(0, 1202.4, 0, 235, 0, 269.7)
# fig = go.Figure(go.Scatter3d(x=x, y=y, z=z, mode = "lines", line_width=4))

fig.add_trace(
    go.Scatter3d(
        x=x,
        y=y,
        z=z,
        mode = "lines",
        line_color = "blue",
        line_width=2,
        hoverinfo = "skip",
    )
)

ar = 4
xr = max(d["x"].max()) - min(d["x"].min())
fig.update_layout(
    title = {"text": pbin, "y": 0.9, "x": 0.5, "xanchor": "center", "yanchor": "top"},
    margin = {"l": 0, "r": 0, "t": 0, "b": 0},
    # autosize=False,
    scene=dict(
        camera=dict(eye=dict(x=2, y=2, z=2)),
        aspectratio = {
            **{"x": ar},
            **{
                c: ((max(d[c].max()) - min(d[c].min())) / xr) * ar
                for c in list("yz")
            },
        },
        aspectmode = "manual",
    ),
)

Сюжетный 3D-график с правильным соотношением сторон

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
57
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Чтобы получить реалистичный 3D-сюжет, вы должны установить в макете scene_aspectmode='data'.

Чтобы построить кадр контейнера, извлеките данные, используемые для построения вокселей, x.min(), x.max(), y.min(), y.max(), z.min(), z.max(), если x, y, z являются массивами или min(x) и т. д., если они являются списками. Затем добавьте к вашей сюжетной фигуре график рассеяния mode = "lines", чтобы нарисовать линии для рамки контейнера. Я проверил его на частичный кадр, прикрепленный к моему собственному воксельному графику, и он работает: voxels

Благодарю. помимо коробок внутри, как нарисовать рамку контейнера, как показано на графике выше.

Jack 05.05.2022 06:42

контейнер 40HC: длина ширина и высота 1202,4, 235, 269,7. не могли бы вы предоставить код для построения границы контейнера?

Jack 07.05.2022 17:02
Ответ принят как подходящий

Кадр состоит из сегментов, и между двумя точками рисуется сегмент. Следовательно, я не могу дать код для построения кадра только по вашей длине, ширине и высоте. Мне нужны координаты вершин параллелепипеда, т.е. x.min(), x.max(), y.min(), y.max() и т. д. (см. выше), обозначаемые xm, xM, ym, yM, zm, zM :

import plotly.graph_objects as go

def parallelipipedic_frame(xm, xM, ym, yM, zm, zM):
    #defines the coords of each segment followed by None, if the line is 
    discontinuous
    x = [xm, xM, xM, xm, xm, None, xm, xM, xM, xm, xm, None, xm, xm, None, xM, xM, 
         None, xM, xM, None, xm, xm]
    y = [ym, ym, yM, yM, ym, None, ym, ym, yM, yM, ym, None, ym, ym, None, ym, ym, 
         None, yM, yM,None, yM, yM]
    z= [zm, zm, zm, zm, zm, None, zM, zM, zM, zM, zM, None, zm, zM, None, zm, zM, 
        None, zm, zM, None, zm, zM]
    return x, y, z

x, y, z= parallelipipedic_frame(2.3, 4.5, 0,5, 0, 2)
fig=go.Figure(go.Scatter3d(x=x, y=y, z=z, mode = "lines", line_width=4))
fig.update_layout(width=600, height=450, font_size=11,  scene_aspectmode = "data", 
                  scene_camera_eye=dict (x=1.45, y=1.45, z=1), template = "none")
fig.show()

что вы подразумеваете под "параллелепипедными вершинами". как интегрироваться с моими существующими кодами?мои полные коды здесь: stackoverflow.com/questions/71318810/…

Jack 07.05.2022 22:47

есть функция о координатах x,y,z, это то, что вы ищете? def vertices(xmin=0, ymin=0, zmin=0, xmax=1, ymax=1, zmax=1): return { "x": [xmin, xmin, xmax, xmax, xmin, xmin, xmax, xmax ], "y": [ymin, ymax, ymax, ymin, ymin, ymax, ymax, ymin], "z": [zmin, zmin, zmin, zmin, zmax, zmax, zmax, zmax], "i": [7, 0, 0, 0, 4, 4, 6, 1, 4, 0, 3, 6], "j": [3, 4, 1, 2, 5, 6, 5, 2, 0, 1 , 6, 3], «к»: [0, 7, 2, 3, 6, 7, 1, 6, 5, 5, 7, 2], }

Jack 08.05.2022 08:51

Да, xm, xM, ym, yM, zm, zM — это x.min(), x.max() и т. д. для массивов x, y, z, которые передаются в go.Mesh3d.

xecafe 08.05.2022 20:56

У меня все еще есть некоторые проблемы, которые я не могу построить правильно. не могли бы вы взглянуть на полные коды здесь и как сделать настройку: stackoverflow.com/questions/71318810/…

Jack 09.05.2022 08:24

Построить такую ​​рамку — задача элементарной геометрии. В моей системе не установлен matplotlib.

xecafe 09.05.2022 14:58

я могу нарисовать внешнюю рамку контейнера (см. мое редактирование), но график смещен влево, как расположить график в центре. как удалить верхнюю правую строку трассировки?

Jack 09.05.2022 15:06

Я использую сюжет, так как вы можете обратиться к полным кодам в ответе здесь: stackoverflow.com/questions/71318810/… Я просто добавляю код (в моем обновлении выше), но график смещается влево. как сделать график центральным и не показывать линию трассировки.

Jack 09.05.2022 15:14

Другие вопросы по теме

Похожие вопросы