我正在尝试创建一个子图,其中三个图彼此相邻,然后在最后一个图的右侧创建一个色条(见图)。
我正在使用以下代码:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rcParams
from mpl_toolkits.axes_grid1 import make_axes_locatable
x = np.linspace(1, 100, 100)
y = np.linspace(0.1, 10, 100)
z = x[:, np.newaxis] + y[np.newaxis, :]
fig, ax = plt.subplots(1, 3, figsize=(12, 4))
ax[0].contourf(x, y, z)
ax[0].set_xlabel('x')
ax[0].set_ylabel('y')
ax[1].contourf(x, y, z)
ax[1].set_xlabel('x')
ax[1].set_ylabel('y')
plt.contourf(x, y, z)
ax[2].set_xlabel('x')
ax[2].set_ylabel('y')
divider = make_axes_locatable(plt.gca())
cax = divider.append_axes("right", "10%", pad="3%")
plt.colorbar(cax=cax)
plt.tight_layout()
plt.show()
我的问题是:1)我不认为前两个图是完全正方形的(我希望它们是正方形的),2)包含颜色条的最后一个图的宽度小于其他两个图的宽度。是否有一些简单的技巧可以解决此问题,还是我必须手动进入并给其中一个填充比另一个填充更多,依此类推。
答案 0 :(得分:0)
如果您不希望子图进入第三轴,则在制作子图时已经为其创建了额外的轴。
要使绘图成正方形,需要设置纵横比:axes.set_aspect(10)
。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(1, 100, 100)
y = np.linspace(0.1, 10, 100)
z = x[:, np.newaxis] + y[np.newaxis, :]
gridspec = {'width_ratios': [1, 1, 1, 0.1]}
fig, ax = plt.subplots(1, 4, figsize=(12, 4), gridspec_kw=gridspec)
ax[0].contourf(x, y, z)
ax[0].set_xlabel('x')
ax[0].set_ylabel('y')
ax[1].contourf(x, y, z)
ax[1].set_xlabel('x')
ax[1].set_ylabel('y')
plt.sca(ax[2])
plt.contourf(x, y, z)
ax[2].set_xlabel('x')
ax[2].set_ylabel('y')
for axes in ax[:3]:
axes.set_aspect(10)
cax = ax[3]
plt.colorbar(cax=cax)
plt.tight_layout()
plt.show()