numpy 如何在matplotlib中禁用3D图的子图中的边框

efzxgjgh  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(96)

我有以下代码,它在matplotlib中生成两个图。
然而,我无法在第二个子图中删除这个边界,尽管我提供了所有这些参数。
我怎样才能删除第二个子图周围的黑色边框(见附图)

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

beta, gamma = np.linspace(-np.pi / 2, np.pi / 2, 500), np.linspace(-np.pi / 2, np.pi / 2, 500)
B, G = np.meshgrid(beta, gamma)

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 6))

# 2D Contour plot
ax1.imshow(obj_vals.T, origin='lower', cmap='hot', extent=(-np.pi/2, np.pi/2, -np.pi/2, np.pi/2))
ax1.set_xlabel(r'$\gamma$')
ax1.set_ylabel(r'$\beta$')
ax1.set_xticks([])
ax1.set_yticks([])

ax2 = fig.add_subplot(122, projection='3d')
# Make panes transparent
ax2.xaxis.pane.fill = False # Left pane
ax2.yaxis.pane.fill = False # Right pane
ax2.zaxis.pane.fill = False # Right pane

# Remove grid lines
ax2.grid(False)
# Remove tick labels
ax2.set_xticklabels([])
ax2.set_yticklabels([])
ax2.set_zticklabels([])

# Transparent spines
ax2.xaxis.line.set_color((1.0, 1.0, 1.0, 0.0))
ax2.yaxis.line.set_color((1.0, 1.0, 1.0, 0.0))
ax2.zaxis.line.set_color((1.0, 1.0, 1.0, 0.0))

ax2.w_xaxis.set_pane_color((1.0, 1.0, 1.0, 0.0))
ax2.w_yaxis.set_pane_color((1.0, 1.0, 1.0, 0.0))

# No ticks
ax2.set_xticks([]) 
ax2.set_yticks([]) 
ax2.set_zticks([])

# Surface plot
surf = ax2.plot_surface(B, G, obj_vals.T, cmap='hot')

plt.axis('off')
plt.tight_layout()
plt.show()

字符串


的数据

7lrncoxx

7lrncoxx1#

我认为这里的问题是,你创建了一个有两个2D轴的子图,然后在右边的2D轴上添加了一个3D轴。你已经删除了3D图的样条,但是你最初制作的原始2D图仍然存在。我认为更好的方法是创建图形,然后单独创建子图,就像this documentation page上显示的那样。
然后,您还可以使用ax.set_axis_off()删除所有3D轴组件,如this answer

import matplotlib.pyplot as plt
import numpy as np

plt.close("all")

x = np.linspace(-2*np.pi, 2*np.pi, 100)
y = np.linspace(-2*np.pi, 2*np.pi, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(X)*np.cos(Y)

fig = plt.figure(figsize=(12,6))

ax1 = fig.add_subplot(1, 2, 1)
ax1.contourf(X, Y, Z, levels=100, cmap="hot")
ax1.set_xlabel(r'$\gamma$')
ax1.set_ylabel(r'$\beta$')
ax1.set_xticks([])
ax1.set_yticks([])

ax2 = fig.add_subplot(1, 2, 2, projection="3d")
ax2.plot_surface(X, Y, Z, cmap="hot", rstride=1, cstride=1)
ax2.set_axis_off()

plt.tight_layout()
plt.show()

字符串


的数据

相关问题