Как это?
df.plot(subplots=True, layout=(4,1))
Кажется, он генерирует именно то, что вы хотели.
Если вы хотите, чтобы надписи были вне графика, вы можете выполнить некоторую обработку после df..plot:
fig = plt.figure(figsize=(14,8))
ax = fig.add_subplot(111)
df = pd.DataFrame(np.random.uniform(size=(20,4)))
df.plot(ax=ax, subplots=True, layout=(4,1)) # ax=ax points df.plot to fig
for each in fig.axes: # You can still modify these axes!
each.legend(loc='center left', bbox_to_anchor=(1, 0.5))
Это позволит установить легенду за пределами графика вправо, так же, как и любую другую легенду.