I've managed to successfully make a figure with three polar plots and have added cartesian axes. The problem I have is that the final figure has a lot of whitespace in between the axes, which I would like to reduce.
I think the problem is to do with the removing of the polar axes and adding of the cartesian axes meaning I'm not adjusting the whitespace in the right place.
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)
As in this question, I've tried adjusting the whitespace using the wspace
argument in fig.subplots_adjust()
at both places it's in the code. This didn't appear to change the figure at all.
Similarly, the layout = "compressed"
argument for plt.subplots()
also doesn't work as in this question.
Again, I think those don't work for me because of the removed and added axes.
Ideally, I want to be able to specify something like the wspace
argument so I can reduce the amount of space in between each figure.
I ran your code using the wspace
parameter in fig.subplots_adjust
to control the width space between the subplots. It works on my machine :-)
Try something like:
fig.subplots_adjust(wspace=-0.25)
Both positive and negative numbers work. You will probably have to adapt your other fig.subplots_adjust
calls to make everything fit however you see best.
Full example, staying with how your code is structured right now:
....
fig.subplots_adjust(bottom=0.15, right=0.85, wspace=-0.35)
....
fig.subplots_adjust(right=0.85)
....