如何在 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()
输出
广告