gpt4 book ai didi

python - 来自 Matplotlib 的 Pane 边缘可见性的 3D 图形

转载 作者:行者123 更新时间:2023-12-04 13:46:20 24 4
gpt4 key购买 nike

我无法看到左 Pane 边缘。

%pylab inline
from mpl_toolkits.mplot3d import axes3d
rcdefaults()

x, y = meshgrid(linspace(-10, 10, 100), linspace(-10, 10, 100))
z = x**2+y**2

fig = figure(figsize=[16, 9])
ax3D = fig.add_subplot(111, projection='3d')
ax3D.plot_surface(x, y, z, rstride=8, cstride=8, alpha=0.3, cmap='hot')
ax3D.contour(x, y, z, zdir='x', offset=ax3D.get_xlim()[0])
ax3D.contour(x, y, z, zdir='y', offset=ax3D.get_ylim()[1])
ax3D.contour(x, y, z, zdir='z', offset=ax3D.get_zlim()[0])
ax3D.xaxis.pane.set_edgecolor('#000000')
ax3D.yaxis.pane.set_edgecolor('#000000')
ax3D.zaxis.pane.set_edgecolor('#000000')
ax3D.xaxis.pane.set_alpha(1)
ax3D.yaxis.pane.set_alpha(1)
ax3D.zaxis.pane.set_alpha(1)
ax3D.xaxis.pane.fill = False
ax3D.yaxis.pane.fill = False
ax3D.zaxis.pane.fill = False
fig.savefig('test')

enter image description here

一个不令人满意的解决方法是通过反转 x 和 y 轴将标记的 ax 放在这个特定的 Pane 边缘上:

ax3D.invert_yaxis()
ax3D.invert_xaxis()

enter image description here

使用 Poly3DCollection 线补丁的更好解决方法几乎可以做到。除了检索到的限制似乎不太正确。

from mpl_toolkits.mplot3d import art3d

i = array([ax3D.get_xlim3d()[0], ax3D.get_ylim3d()[0], ax3D.get_zlim3d()[0]])
f = array([ax3D.get_xlim3d()[0], ax3D.get_ylim3d()[0], ax3D.get_zlim3d()[1]])
p = art3d.Poly3DCollection(array([[i, f]]))
p.set_color('black')
ax3D.add_collection3d(p)

enter image description here

最佳答案

所以这是我对这个问题有点老套的答案或者更好的解决方法:

%pylab inline
%matplotlib notebook
%matplotlib notebook
from mpl_toolkits.mplot3d import axes3d, art3d
rcdefaults()

x, y = meshgrid(linspace(-10, 10, 100), linspace(-10, 10, 100))
z = x**2+y**2

fig = figure()
ax3D = fig.add_subplot(111, projection='3d')
ax3D.plot_surface(x, y, z, rstride=8, cstride=8, alpha=0.3, cmap='hot')

def lims(mplotlims):
scale = 1.021
offset = (mplotlims[1] - mplotlims[0])*scale
return mplotlims[1] - offset, mplotlims[0] + offset
xlims, ylims, zlims = lims(ax3D.get_xlim()), lims(ax3D.get_ylim()), lims(ax3D.get_zlim())
ax3D.contour(x, y, z, zdir='x', offset=xlims[0])
ax3D.contour(x, y, z, zdir='y', offset=ylims[1])
ax3D.contour(x, y, z, zdir='z', offset=zlims[0])
i = array([xlims[0], ylims[0], zlims[0]])
f = array([xlims[0], ylims[0], zlims[1]])
p = art3d.Poly3DCollection(array([[i, f]]))
p.set_color('black')
ax3D.add_collection3d(p)

ax3D.xaxis.pane.set_edgecolor('#000000')
ax3D.yaxis.pane.set_edgecolor('#000000')
ax3D.zaxis.pane.set_edgecolor('#000000')
ax3D.xaxis.pane.set_alpha(1)
ax3D.yaxis.pane.set_alpha(1)
ax3D.zaxis.pane.set_alpha(1)
ax3D.xaxis.pane.fill = False
ax3D.yaxis.pane.fill = False
ax3D.zaxis.pane.fill = False
fig.tight_layout()
show()

enter image description here

关于python - 来自 Matplotlib 的 Pane 边缘可见性的 3D 图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47334760/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com