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

10

我想以如下图的方式生成子图标题:

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')
结果的显示如下图所示:

输入图片说明

在我的结果中,作为标题背景框的矩形无法显示。

欢迎提出任何建议或更好的解决方案!


这是一次“盲目”的尝试。如果10是一个正高度,为什么不以(0,50)作为原点开始呢? - marcoresk
2个回答

16

我认为更好的方式是使用 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


2

删除这行:

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中的此问题


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接