Matplotlib:3D曲面图关闭背景但保留坐标轴。

19
我想做一个3D曲面图,显示坐标轴但不显示坐标轴之间的面。我找到了如何关闭坐标轴和面的方法,使用ax.set_axis_off()。有没有办法只关闭这些面,或者使它们透明?(在第一张图片中,如果你仔细看,你可以看到这些面) With axes and background Without axes and background

请参见https://dev59.com/C2gu5IYBdhLWcg3wRlFh。 - ImportanceOfBeingErnest
2个回答

33

你无法“关闭窗格”,但是你可以更改它们的颜色,从而使它们变为透明。

ax.xaxis.set_pane_color((1.0, 1.0, 1.0, 0.0))

完整代码:

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.gca(projection='3d')
ax.set_xlabel("x"); ax.set_ylabel("y"); ax.set_zlabel("z")

x = np.arange(-5, 5, 0.25)
X, Y = np.meshgrid(x,x)
Z = np.sin(np.sqrt(X**2 + Y**2))

# make the panes transparent
ax.xaxis.set_pane_color((1.0, 1.0, 1.0, 0.0))
ax.yaxis.set_pane_color((1.0, 1.0, 1.0, 0.0))
ax.zaxis.set_pane_color((1.0, 1.0, 1.0, 0.0))
# make the grid lines transparent
ax.xaxis._axinfo["grid"]['color'] =  (1,1,1,0)
ax.yaxis._axinfo["grid"]['color'] =  (1,1,1,0)
ax.zaxis._axinfo["grid"]['color'] =  (1,1,1,0)

surf = ax.plot_surface(X, Y, Z, cmap=plt.cm.coolwarm,
                   linewidth=0, antialiased=False)

fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()

输入图像描述


1

这个答案对我来说更好,是一个干净、一行的解决方案。

fig, ax = plt.subplots(subplot_kw={"projection": "3d"})
ax.set_axis_off()

另一种非常适合自定义背景的方法:

for axis in [ax.xaxis, ax.yaxis, ax.zaxis]:
    axis.set_ticklabels([])
    axis._axinfo['axisline']['linewidth'] = 1
    axis._axinfo['axisline']['color'] = "b"
    axis._axinfo['grid']['linewidth'] = 0.5
    axis._axinfo['grid']['linestyle'] = "--"
    axis._axinfo['grid']['color'] = "#d1d1d1"
    axis._axinfo['tick']['inward_factor'] = 0.0
    axis._axinfo['tick']['outward_factor'] = 0.0
    axis.set_pane_color((0, 0, 0))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接