我已经成功地制作了一个具有三个极坐标图的图形,并添加了笛卡尔轴。我遇到的问题是最终的图形在轴之间有很多空白,我想减少这些空白。
我认为问题在于删除极轴并添加笛卡尔轴,这意味着我没有在正确的位置调整空白。
import numpy as np
import matplotlib.pyplot as plt
r_out = 6.0
level = np.linspace(-100,100,30)
axis_text = [r"$t/t_A = 0$", r"$t/t_A = 30$", r"$t/t_A = 60$"]
fig, [ax1, ax2, ax3] = plt.subplots(1,3,figsize=(15,4), subplot_kw=dict(polar=True))
fig.subplots_adjust(bottom=0.15, right=0.85) # controls placement of figures but not space in between
axs = [ax1, ax2, ax3]
r = np.linspace(0.5, r_out, 20)
theta = np.linspace(-np.pi, np.pi, 20)
data_to_plot = np.array([[r[i]**2 * np.sin(theta[j]) for i in range(np.size(r))] for j in range(np.size(theta))])
R, T = np.meshgrid(r, theta)
X, Y = R*np.cos(T), R*np.sin(T)
r_lim = (-r_out-0.1, r_out+0.1)
for i in range(len(axs)):
ax = axs[i]
ax.axis('off')
new_axis = fig.add_axes(ax.get_position().bounds,ylim=r_lim,xlim=r_lim,aspect='equal')
cont = new_axis.contourf(X, Y, np.squeeze(data_to_plot), levels=level, cmap='coolwarm')
if i == 0:
new_axis.set_ylabel(r"$y$", fontsize=18)
new_axis.set_xlabel(r"$x$", fontsize=18)
if i != 0:
new_axis.set_yticklabels([])
new_axis.set_yticks([])
new_axis.tick_params(axis="both", labelsize=18)
new_axis.set_title(axis_text[i], fontsize=20)
fig.subplots_adjust(right=0.89) # Controls fitting in of colorbar
cbar = fig.colorbar(cont, ax=axs[2])
cbar.set_ticks(np.linspace(level.min(), level.max(), 5))
cbar.ax.tick_params(labelsize=18)
cbar.ax.set_ylabel(r"$u_r$", fontsize = 22)
正如在这个问题中一样,我尝试在代码中的两个位置使用
wspace
中的fig.subplots_adjust()
参数来调整空白。这似乎根本没有改变数字。
同样,
layout = "compressed"
的plt.subplots()
参数也不能像这个问题那样工作。
再次,我认为这些对我不起作用,因为删除和添加了轴。
理想情况下,我希望能够指定类似
wspace
参数的内容,这样我就可以减少每个图形之间的空间量。
您可以使用
wspace
中的 fig.subplots_adjust
参数来控制子图之间的宽度空间。
尝试类似:
fig.subplots_adjust(wspace=-0.25)
正数和负数都有效。