Курсор не включает первый оператор выбора в результаты

Вы можете ограничить сохраненную область фигуры рамкой ограничения легенды, используя аргумент bbox_inches в fig.savefig. Ниже вариантов функции, которую вы можете просто вызвать с легендой, которую вы хотите сохранить в качестве аргумента. Вы можете использовать легенду, созданную на исходном рисунке здесь (и удалить ее впоследствии, legend.remove()), или вы можете создать новую фигуру для легенды и просто использовать функцию как есть.

Экспортировать легенду boundingbox

Если полная легенда будет сохранена, ограничивающая рамка, предоставленная аргументу bbox_inches, будет просто преобразованной ограничивающей рамкой легенды. Это хорошо работает, если легенда не имеет границы вокруг него.

import matplotlib.pyplot as plt

colors = ["crimson", "purple", "gold"]
f = lambda m,c: plt.plot([],[],marker=m, color=c, ls="none")[0]
handles = [f("s", colors[i]) for i in range(3)]
labels = colors
legend = plt.legend(handles, labels, loc=3, framealpha=1, frameon=False)

def export_legend(legend, filename="legend.png"):
    fig  = legend.figure
    fig.canvas.draw()
    bbox  = legend.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
    fig.savefig(filename, dpi="figure", bbox_inches=bbox)

export_legend(legend)
plt.show()

Экспортировать расширенный ограничивающий рамку

Если есть является границей вокруг легенды, вышеупомянутое решение может быть неоптимальным. В этом случае имеет смысл расширить ограничительную рамку на несколько пикселей, чтобы включить границу в ее полную.

import numpy as np
import matplotlib.pyplot as plt

colors = ["crimson", "purple", "gold"]
f = lambda m,c: plt.plot([],[],marker=m, color=c, ls="none")[0]
handles = [f("s", colors[i]) for i in range(3)]
labels = colors
legend = plt.legend(handles, labels, loc=3, framealpha=1, frameon=True)

def export_legend(legend, filename="legend.png", expand=[-5,-5,5,5]):
    fig  = legend.figure
    fig.canvas.draw()
    bbox  = legend.get_window_extent()
    bbox = bbox.from_extents(*(bbox.extents + np.array(expand)))
    bbox = bbox.transformed(fig.dpi_scale_trans.inverted())
    fig.savefig(filename, dpi="figure", bbox_inches=bbox)

export_legend(legend)
plt.show()

0
задан Kaτ_τ 30 December 2018 в 10:17
поделиться