绘图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",
),
)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
框架由段组成,并在两个点之间绘制一个段。因此,我不能仅根据您的长度,宽度和高度提供plottin框架的代码。
我需要并联的顶点的坐标,iexmin(),x.max(),y.min(),y.max(),等等(请参见上文),表示xm,xm,xm,ym,ym,ym,ym,ym,zm,zm:
The frame consists of segments, and a segment is drawn between two points. Hence I cannot give the code for plottin the frame only from your length, width and height.
I need the coordinates of the parallelipiped vertices, i.e. x.min(), x.max(), y.min(), y.max(), etc (see above), denoted xm, xM, ym, yM, zm, zM:
要获取现实的3D图,您应该在布局中设置
caset_aspectMode ='data'
。要绘制容器框架,请从用于绘制体素的数据中检索
x.min(),x.max(),y.min(),y.max(),z.min(),z。 max()
,如果x,y,z是数组或min(x)等如果它们为列表。然后添加到您的情节中,可以查找一个散点图图,mode =“ lines”
以绘制容器框架的线路。我检查了它的部分框架,该框架附在我自己的Voxel图上,它有效:To get a realistic 3d plot, you should set in layout,
scene_aspectmode='data'
.To plot the container frame, retrieve from data used to plot the voxels,

x.min(), x.max(), y.min(), y.max(), z.min(), z.max()
, if x, y, z are arrays or min(x) etc if they are lists. Then add to your plotly figure a scatter3d plot,mode="lines"
to draw the lines for container frame. I checked it for a partial frame attached to my own voxel plot, and it works: