我有以下代码,它在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()
字符串
的数据
1条答案
按热度按时间7lrncoxx1#
我认为这里的问题是,你创建了一个有两个2D轴的子图,然后在右边的2D轴上添加了一个3D轴。你已经删除了3D图的样条,但是你最初制作的原始2D图仍然存在。我认为更好的方法是创建图形,然后单独创建子图,就像this documentation page上显示的那样。
然后,您还可以使用
ax.set_axis_off()
删除所有3D轴组件,如this answer。字符串
的数据