Как экспортировать SVG в Matplotlib с правильной шкалой мм - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь экспортировать фигуру из matplotlib для лазерной резки.Фигура изображена с миллиметрами в качестве единиц измерения.

Я пытаюсь обеспечить правильный масштаб, получая ограничивающую рамку в дюймах, а затем установив размер фигуры в это значение:

import matplotlib.pyplot as plt
ax = plt.subplot(111)

<snipped for brevity...plotting of lines and paths>

x_bound = map(mm_to_inch, ax.get_xbound())
y_bound = map(mm_to_inch, ax.get_ybound())
plt.gcf().set_size_inches(x_bound[1] - x_bound[0], y_bound[1] - y_bound[0])
plt.axis('off')
plt.savefig('{0}.svg'.format(self.name, format='svg'))

Экспортированный файл .svg составляет ~ 2 / 3rds от предполагаемого масштаба, и я недостаточно знаком с осями и цифрами, чтобы понять, почему.Кроме того, вокруг предполагаемой геометрии есть черная граница.Вот несколько примеров вывода: .svg output (преобразованный в .png)

Как мне удалить черную рамку и правильно масштабировать .svg?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

На основе ответа ImportanceOfBeingErnest и некоторых ответов на другие вопросы stackoverflow работает следующее решение:

plt.axis('off')
plt.margins(0, 0)
plt.gca().xaxis.set_major_locator(plt.NullLocator())
plt.gca().yaxis.set_major_locator(plt.NullLocator())
plt.subplots_adjust(top=1, bottom=0, right=1, left=0, hspace=0, wspace=0)

x_bound = map(mm_to_inch, self._ax.get_xbound())
y_bound = map(mm_to_inch, self._ax.get_ybound())
plt.gcf().set_size_inches(x_bound[1] - x_bound[0], y_bound[1] - y_bound[0])
0 голосов
/ 28 ноября 2018

Вы, вероятно, хотите полностью удалить поля вокруг осей,

plt.gcf().subplots_adjust(0,0,1,1)

Однако могу заметить, что результат может быть недостаточно точным для приложения.Обязательно рассмотрите возможность создания фигуры с помощью программы CAD.

...