如何在Matplotlib中的绘图框外绘制矩形

时间:2017-01-04 16:52:29

标签: python python-2.7 matplotlib visualization

我希望以下图的方式生成子图标题:

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

  

作为标题背景框的矩形不能显示在我的结果

感谢任何建议或更好的解决方案!

2 个答案:

答案 0 :(得分:4)

我认为更好的方法是使用Rectangle clip_on = False 选项:

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 :(得分: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的更多信息,请参阅SO中的this question