慕田峪4524236
您可以生成矩形网格并使用mpl_toolkits.mplot3d.art3dpathpatch_2d_to_3d中的函数 将其插入 3d 场景中:import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3Dfrom matplotlib.patches import Rectangleimport mpl_toolkits.mplot3d.art3d as art3d# Create figureplt.style.use('dark_background') # Dark themefig = plt.figure(frameon=False)ax = fig.add_subplot(111, projection='3d')# Make planes transparentax.xaxis.pane.fill = False # Left planeax.yaxis.pane.fill = False # Right plane# ax.zaxis.pane.fill = False # Horizontal plane# Remove grid linesax.grid(False)# Remove tick labelsax.set_xticklabels([])ax.set_yticklabels([])ax.set_zticklabels([])# Draw chessboard on hortizontal planefor x_index, x in enumerate(np.arange(-1, 1.1, 0.2)): for y_index, y in enumerate(np.arange(-1, 1.1, 0.2)): if (x_index+y_index)%2: p = Rectangle([x,y], 0.2, 0.2) ax.add_patch(p) art3d.pathpatch_2d_to_3d(p, z=0, zdir="z")ax.set(xlim=(-1,1.1), ylim=(-1,1.2), zlim=(0,15))# Random data to illustratezdata = 15 * np.random.random(100)xdata = np.sin(zdata) + 0.1 * np.random.randn(100)ydata = np.cos(zdata) + 0.1 * np.random.randn(100)ax.scatter3D(xdata, ydata, zdata, c=zdata, cmap='Greens')# Print chartfile_path = 'charts/3d.png'fig.savefig(file_path, bbox_inches='tight', pad_inches=0.05, transparent=True)编辑:更清洁的版本RECT_SIZE_X = 0.2RECT_SIZE_Y = 0.2xlims = (-1, 1)ylims = (-1, 1)for x_index, x_pos in enumerate(np.arange(xlims[0], xlims[1], RECT_SIZE_X)): for y_index, y_pos in enumerate(np.arange(ylims[0], ylims[1], RECT_SIZE_Y)): if (x_index+y_index)%2: p = Rectangle([x_pos, y_pos], RECT_SIZE_X, RECT_SIZE_Y, color='orange') else: p = Rectangle([x_pos, y_pos], RECT_SIZE_X, RECT_SIZE_Y, color='gray') ax.add_patch(p) art3d.pathpatch_2d_to_3d(p, z=0, zdir="z")ax.set(xlim=xlims, ylim=ylims, zlim=(0,15))# Transparent spinesax.w_xaxis.line.set_color((1.0, 1.0, 1.0, 0.0))ax.w_yaxis.line.set_color((1.0, 1.0, 1.0, 0.0))ax.w_zaxis.line.set_color((1.0, 1.0, 1.0, 0.0))# Transparent panesax.w_xaxis.set_pane_color((1.0, 1.0, 1.0, 0.0))ax.w_yaxis.set_pane_color((1.0, 1.0, 1.0, 0.0))ax.w_zaxis.set_pane_color((1.0, 1.0, 1.0, 0.0))# No ticksax.set_xticks([]) ax.set_yticks([]) ax.set_zticks([])