我想在 matplotlib 图中有两个子图,它们的大小和位置相对于彼此,如下例所示(出于风格原因)。我见过的用于自定义子图位置和大小的所有示例仍然平铺并填充整个图形足迹。我该怎么做才能让最右边的图定位有一些空白,如下所示?
您需要想象放置子图的一些(虚拟)网格。
网格有 3 行和 2 列。第一个子图覆盖所有三行和第一列。第二个子图仅覆盖第二列的第二行。行和列大小之间的比率不一定相等。
import matplotlib.pyplot as plt
import matplotlib.gridspec
gs = matplotlib.gridspec.GridSpec(3,2, width_ratios=[1,1.4],
height_ratios=[1,3,1])
fig = plt.figure()
ax1 = fig.add_subplot(gs[:,0])
ax2 = fig.add_subplot(gs[1,1])
plt.show()
Run Code Online (Sandbox Code Playgroud)
此外,您仍然可以为hspace和wspace参数设置不同的值。
GridSpec 教程中给出了一个很好的概述。
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
w,h = fig.get_size_inches()
div = np.array([w,h,w,h])
# define axes in by rectangle [left, bottom, width, height], numbers in inches
ax1 = fig.add_axes(np.array([.7, .7, 1.8, 3.4])/div)
ax2 = fig.add_axes(np.array([3, 1.4, 3, 2])/div)
plt.show()
Run Code Online (Sandbox Code Playgroud)