如何将添加到极坐标图中的笛卡尔子图轴移得更近?

问题描述 投票:0回答:1

我已经成功地制作了一个具有三个极坐标图的图形,并添加了笛卡尔轴。我遇到的问题是最终的图形在轴之间有很多空白,我想减少这些空白。

我认为问题在于删除极轴并添加笛卡尔轴,这意味着我没有在正确的位置调整空白。

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
参数的内容,这样我就可以减少每个图形之间的空间量。

Here's the reproducible figure from the code

python matplotlib polar-coordinates contourf
1个回答
0
投票

您可以使用

wspace
中的
fig.subplots_adjust
参数来控制子图之间的宽度空间。

尝试类似:

fig.subplots_adjust(wspace=-0.25)

正数和负数都有效。

© www.soinside.com 2019 - 2024. All rights reserved.