2017-01-04 2 views
2

Я хочу, чтобы генерировать заголовок подфигуров в стиле следует фигуры:Как нарисовать прямоугольник за пределами участка кадра в Matplotlib

enter image description here

серая коробка должна быть под названием, которые находятся на вершине точки рассеяния.

Вот код, я пробовал:

x = random.sample(range(50), 50) 
y= random.sample(range(50), 50) 

fig = pyplot.figure() 
ax = pyplot.subplot(111) 
ax.scatter(x,y,label='a') 
ax.set_aspect('equal') 
ax.set_xlim(0,60) 
ax.set_ylim(0,60) 
ax.plot([0,60], [0, 60], color='k', linestyle='-', linewidth=1.25) 

ax.add_patch(patches.Rectangle((0,60),60, 10,facecolor='silver',linewidth = 0)) 
TITLE = ax.text(26,61, r'$\mathregular{Title}$',fontsize = 14,zorder = 5,color = 'k') 

Результаты показывают, как:

enter image description here

Прямоугольник в качестве фона коробки заголовка не может быть показано в моем

Любые советы или рекомендации solutio n цените!

+0

Это «слепая» попытка. Если 10 - положительная высота, почему бы не начать (0,50) в качестве источника? – marcoresk

ответ

1

Я думаю, что лучший способ заключается в использовании clip_on = False варианта для Rectangle:

import random 
import matplotlib.pyplot as pyplot 

x = random.sample(range(50), 50) 
y= random.sample(range(50), 50) 

fig = pyplot.figure() 
ax = pyplot.subplot(111) 
ax.scatter(x,y,label='a') 
ax.set_aspect('equal') 
ax.set_xlim(0,60) 
ax.set_ylim(0,60) 
ax.plot([0,60], [0, 60], color='k', linestyle='-', linewidth=1.25) 

ax.add_patch(pyplot.Rectangle((0,60),60, 10,facecolor='silver', 
           clip_on=False,linewidth = 0)) 
TITLE = ax.text(26,61, r'$\mathregular{Title}$',fontsize = 14,zorder = 5, 
       color = 'k') 
pyplot.show() 

Это дает прямоугольник обращается за пределами осей, не прибегая к дополнительным пространствам:

enter image description here

1

Удалить эту строку:

ax.add_patch(patches.Rectangle((0,60),60, 10,facecolor='silver',linewidth = 0)) 

И измените последнюю строку, добавив bbox:

TITLE = ax.text(26,62, 'Title',fontsize = 14,zorder = 6, color = 'k', 
       bbox={'facecolor':'silver', 'alpha':0.5, 'pad':4}) 

bbox_example

Единственный способ я нашел, чтобы дать ему произвольную длину, чтобы добавить пустое пространство.

TITLE = ax.text(1,62, '      Title     ', 
       fontsize = 14,zorder = 6,color = 'k', 
       bbox={'facecolor':'silver', 'alpha':0.5, 'pad':4}) 

bbox_example_2

Для получения дополнительной информации о BBOX см this question в SO.

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