我尝试制作一个子图,其中有三个相邻的图,然后在最后一个图的右侧添加一个颜色条(见图)。
我用这段代码来做:
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)最后一个图,包括颜色条是小于宽度比其他两个。有一些简单的技巧来解决这个问题,或者我必须手动进去,给予一个比另一个多一点的填充等等。
1条答案
按热度按时间6xfqseft1#
如果你不想让子图吃掉第三个轴,那么在制作子图的时候就已经为它创建了一个额外的轴。
要使绘图呈方形,您需要设置纵横比:
axes.set_aspect(10)
。将其他图做成正方形会使它们的高度小于颜色条。避免这种情况的快速而肮脏的方法是使用较小的图高度,例如
figsize=(12, 3)
。