我想要 2 个相同大小的地块。图形的大小并不那么重要。 我所做的唯一改变是标签的长度。 (实际上我有2个相关的数据集)
长标签会导致绘图变形。我怎样才能避免这种情况?我需要 2 个连贯的情节。
import numpy as np
from matplotlib import pyplot as plt
def my_plot(x,ys,labels, size = (5.75, 3.2)):
fig, ax1 = plt.subplots(nrows=1, ncols=1, sharex=True,
figsize=size,
dpi = 300)
ax1.plot(x, ys[0], label = labels[0])
ax1.plot(x, ys[1], label = labels[1])
## Add ticks, axis labels and title
ax1.set_xlim(0,21.1)
ax1.set_ylim(-50,50)
ax1.tick_params(axis='both', which='major', labelsize=18)
ax1.set_xlabel('Time', size = 18)
ax1.set_ylabel('Angle', size = 18)
## Add legend outside the plot
ax1.legend(ncol=1, bbox_to_anchor=(1, 0.5), loc='center left', edgecolor='w')
# Dummy data
x1 = np.arange(0, 24, 0.1)
y1_1 = np.sin(x1)*45
y1_2 = np.cos(x1)*25
my_plot(x1, [y1_1, y1_2], ["sin", "cos", "tan"])
my_plot(x1, [y1_1, y1_2], ["long_sin", "long_cos", "long_tan"])
产生以下两个图:
我已经尝试过:
plt.tight_layout()
ax1.set_aspect(0.1)
这可以通过 matplotlib GridSpec 来实现:
from matplotlib.gridspec import GridSpec
通过为子图创建网格,您可以控制大小。布局是一个两行两列的网格。为图例/标签保留一列,这样它们就不会干扰主图的大小。
fig = plt.figure(figsize=(10, 8), dpi=100)
gs = GridSpec(2, 2, width_ratios=[1, 0.3], height_ratios=[1, 1], wspace=0.3, hspace=0.4)
# First plot (Top)
ax1 = fig.add_subplot(gs[0, 0])
my_plot(ax1, x1, [y1_1, y1_2], ["sin", "cos"])
# Second plot (Bottom) with longer labels
ax2 = fig.add_subplot(gs[1, 0])
my_plot(ax2, x1, [y1_1, y1_2], ["long_sine_label", "long_cosine_label"])