如何在 Matplotlib 中使用 GridSpec 类将多个图形对齐到一个网格中


将多个图形对齐到一个网格中可能会非常凌乱,它会造成多个问题,例如要对齐所有图形需要更大的宽度和高度或更小的宽度。为了将所有图形对齐到一个网格中,我们使用 GridSpec 类。

假设我们有一个条形图,并且我们想要对齐该示例中图形的对称性。

首先导入所有必要的库,并在两个网格中绘制一些图形。然后,我们在第一个网格上绘制一个常数误差条和一个对称的和不对称的误差条。在第二个网格中,我们将绘制样本误差条。

示例

import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec

#Define the figure size and layout
fig = plt.figure(figsize=(8,8))
plt.style.use('seaborn-deep')

#Define the function to plot the graph
def plot_errorbar(axs, x, y, xerr=None, yerr=None, errevery=1,
   title=None, xlabel=None, ylabel=None, fmt=None):
      ax = fig.add_subplot(axs)
ax.errorbar(x, y, xerr=xerr, yerr=yerr, errorevery=errevery, fmt=fmt)
ax.set(title=title, xlabel=xlabel, ylabel=ylabel)

#First grid with size (3,1)
gs1 = GridSpec(3, 1)

#Data for exponential curve
x = np.arange(0.1, 5, 0.5)
y = np.exp(-x)

#Plot the errorbar with constant axis x and y
plot_errorbar(gs1[0], x, y, xerr=0.8, yerr=0.3, title='Constant
   Errors', xlabel='X', ylabel='Y', fmt='-o')
#Define the varying error with as a function of x
error = 0.1 + 0.25 * x
plot_errorbar(gs1[1], x, y, yerr=error, title='Variable Symmetric
   Error', xlabel='X', ylabel='Y', fmt='-o')

#Define the bounded and unbounded error
lower_error = 0.5 * error
upper_error = error
asymmetric_error = [lower_error, upper_error]
plot_errorbar(gs1[2], x, y, xerr=asymmetric_error, title='Variable
   Asymmetric Error', xlabel='X', ylabel='Y', fmt='o')

#Plot the Grid 2 with the same step as in Grid 1
gs1.tight_layout(fig, rect=[0, 0, 0.5, 1])

#Define the data with a smaller interval for exponential curve
x = np.arange(0.1, 5, 0.1)
y = np.exp(-x)
gs2 = GridSpec(2, 1)
'yerr = 0.1 + 0.1 * np.sqrt(x)
plot_errorbar(gs2[0], x, y, yerr=yerr, title='All Errorbars', xlabel='X', ylabel='Y', fmt='-')
plot_errorbar(gs2[1], x, y, yerr=yerr, errevery=5, title='5th errorbar', xlabel='X', ylabel='Y', fmt='-')
gs2.tight_layout(fig, rect=[0.5, 0, 1, 1], h_pad=0.5)
top = min(gs1.top, gs2.top)
bottom = max(gs1.bottom, gs2.bottom)
gs1.update(top=top, bottom=bottom)
gs2.update(top=top, bottom=bottom)

#Display the plot
plt.show()

输出

更新于: 2021-02-23

835 次浏览

开启你的 职业生涯

完成课程以获得认证

开始
广告