Я хочу переместить легенду фигуры с несколькими подвидениями в верхний центр относительно всей фигуры. Я попытался передать объект легенды, созданный с fig.legend
, до fig.savefig
, используя bbox_extra_artist
, как описано here. Однако в отличие от описанной легенда получает отсечение:легенда Matplotlib относительно фигуры в множителе
Это код, который я использовал:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(-2*np.pi, 2*np.pi, 0.1)
fig, axes = plt.subplots(nrows=5, ncols=3, sharex=True, sharey=False)
legendLines = []
for rI, rA in enumerate(axes):
for cI, ax in enumerate(rA):
line, = ax.plot(x, np.sin(x), label='Sine')
legendLines.append(line)
line, = ax.plot(x, np.cos(x), label='Cosine')
legendLines.append(line)
line, = ax.plot(x, np.arctan(x), label='Inverse tan')
legendLines.append(line)
if cI == 0:
ax.set_ylabel('foo')
if rI == len(axes) -1:
ax.set_xlabel('bar')
if rI == 0:
ax.set_title('baz')
legend = fig.legend(legendLines[:3], ['Sine', 'Cosine', 'Inverse Tan'], 'upper center', frameon=False, ncol=3, borderaxespad=-0.7)
outFile = 'test.pdf'
fig.set_size_inches(8,7)
fig.tight_layout()
fig.savefig(outFile, bbox_extra_artists=[legend], bbox_inches='tight')
plt.close()
Я ищу метод, который позволил мне определить легенду расположение относительно вся фигура не просто подстрока.
Update:
Если я заменяю
legend = fig.legend(legendLines[:3], ['Sine', 'Cosine', 'Inverse Tan'], 'upper center', frameon=False, ncol=3, borderaxespad=-0.7)
с
legend = fig.legend(legendLines[:3], ['Sine', 'Cosine', 'Inverse Tan'], loc='lower center', frameon=False, ncol=3, bbox_to_anchor=(.5, 0.965))
результат тот же: площадь участка не увеличивается и легенда сдвигается от сюжета.
(система: Matplotlib-1.2.0-py2.7-MacOSX-10,8-Intel)
Вы говорите, что даже с 'borderaxespad = -0.7' и без' bbox_to_anchor' в параметрах 'fig.legend' вы могли иметь легенду полностью захвачен в pdf? Потому что это не сработало для меня. – Primer
Я думаю, 'bbox_to_anchor' - это путь. Однако, 'loc = 'верхний центр', frameon = False, ncol = 3, borderaxespad = 0' без' bbox_to_anchor' дает также желаемый результат. Thx для ваших намеков! – Faber