2017-01-20 3 views
2

Я пытаюсь нарисовать круг с matplotlib с диаметром, скажем, 2 дюйма и границей 10 пикселей, и я хочу сохранить его в файле. Это мой код:Круг с matplotlib с рамкой из рисунка

import matplotlib.pyplot as plt 
from matplotlib import patches 

path = 'test.png' 

fig1 = plt.figure() 
fig1.dpi = 100 
fig1.set_size_inches(2, 2) 
ax1 = fig1.add_subplot(111, aspect='equal') 
ax1.axes.get_xaxis().set_visible(False) 
ax1.axes.get_yaxis().set_visible(False) 

ax1.add_patch(patches.Circle((0.5, 0.5), 
          radius=0.5, 
          color='k', linewidth=10, fill=False)) 

fig1.tight_layout() 
fig1.savefig(path, bbox_inches='tight', pad_inches=0) 

и это то, что я получаю:

Circle

Как вы можете видеть, часть границы из картины.

В самом деле, даже делать что-то гораздо проще, я получаю аналогичные результаты:

import matplotlib.pyplot as plt 
from matplotlib import patches 

fig1 = plt.figure() 
ax1 = fig1.add_subplot(111, aspect='equal') 
ax1.add_patch(patches.Circle((0.5, 0.5), 
          radius=0.5, 
          color='k', linewidth=10, fill=False)) 

plt.show() 

так, я не могу понять, где проблема.

Что я делаю неправильно?

ответ

0

Пределы небольшие, по умолчанию занимают минимальное положение и максимум всех точек без учета толщины, я рекомендую вам установить пределы немного больше. Вы должны быть {axes}.set_xlim() и {axes}.set_ylim()

import matplotlib.pyplot as plt 
from matplotlib import patches 

path = 'test.png' 

fig1 = plt.figure() 
fig1.dpi = 100 
fig1.set_size_inches(2, 2) 
ax1 = fig1.add_subplot(111, aspect='equal') 
ax1.axes.get_xaxis().set_visible(False) 
ax1.axes.get_yaxis().set_visible(False) 

ax1.add_patch(patches.Circle((0.5, 0.5), 
          radius=0.5, 
          color='k', linewidth=10, fill=False)) 
ax1.set_xlim([-0.1, 1.1]) 
ax1.set_ylim([-0.1, 1.1]) 
fig1.tight_layout() 
fig1.savefig(path, bbox_inches='tight', pad_inches=0) 

enter image description here

2

Добавление патч не будет автоматически регулировать пределы осей. Вы должны позвонить ax1.autoscale_view(), чтобы настроить пределы содержания.

fig1 = plt.figure() 
ax1 = fig1.add_subplot(111, aspect='equal') 
ax1.add_patch(patches.Circle((0.5, 0.5), 
          radius=0.5, 
          color='k', linewidth=10, fill=False)) 
ax1.autoscale_view() 

Circle

+0

Я не знаю, почему это не работает для меня! Я скопировал и вставил ваш код и все еще получаю границу изображения. Я использую python 3.5 и matplotlib 1.5.3. – gpSO

+1

@gpSO Он работает с matplotlib 2.0.0. Если вы не можете выполнить обновление, вам придется вручную настроить пределы осей, как описано в другом ответе. – Goyo

Смежные вопросы