Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib在图的底部添加签名栏_Python_Matplotlib - Fatal编程技术网

Python Matplotlib在图的底部添加签名栏

Python Matplotlib在图的底部添加签名栏,python,matplotlib,Python,Matplotlib,我正在尝试在图形底部添加一个签名栏。我希望能够做到这一点,而无需使用文本x和y值以及添加空字符串的所有手动劳动。我曾考虑使用annotate,但我有几个问题: import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.add_subplot(111) t = np.arange(0.0, 5.0, 0.01) s = np.cos(2*np.pi*t) line, = ax.plot(t, s

我正在尝试在图形底部添加一个签名栏。我希望能够做到这一点,而无需使用文本x和y值以及添加空字符串的所有手动劳动。我曾考虑使用annotate,但我有几个问题:

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()

ax = fig.add_subplot(111)
t = np.arange(0.0, 5.0, 0.01)
s = np.cos(2*np.pi*t)
line, = ax.plot(t, s, lw=2)

ax.set_ylim(-2,2)
ax.set_xlabel('Angle')

ax.annotate('What what?', xy=(0, 0), xycoords='figure fraction',backgroundcolor = 'blue')
我的主要问题: 1.我想让横条穿过整个图形的宽度。我可以添加空白文本来扩展横条,但我希望有一些自动化的东西,这样我就不必为不同的场景手动操作。 2.我想移动酒吧一点更低的酒吧不消失或裁剪它


任何建议都很好

调整文本的边界框有点棘手。此问题中显示了这样做的选项:

为了避免这种情况,一个更简单但自动化程度较低的解决方案是在图形的下部创建一个矩形,并添加一些文本,使文本看起来像位于矩形中

import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()

ax = fig.add_subplot(111)
t = np.arange(0.0, 5.0, 0.01)
s = np.cos(2*np.pi*t)
line, = ax.plot(t, s, lw=2)

ax.set_ylim(-2,2)
ax.set_xlabel('Angle')


def signaturebar(fig,text,fontsize=10,pad=5,xpos=20,ypos=7.5,
                 rect_kw = {"facecolor":"grey", "edgecolor":None},
                 text_kw = {"color":"w"}):
    w,h = fig.get_size_inches()
    height = ((fontsize+2*pad)/72.)/h
    rect = plt.Rectangle((0,0),1,height, transform=fig.transFigure, clip_on=False,**rect_kw)
    fig.axes[0].add_patch(rect)
    fig.text(xpos/72./h, ypos/72./h, text,fontsize=fontsize,**text_kw)
    fig.subplots_adjust(bottom=fig.subplotpars.bottom+height)

signaturebar(fig,"This is my signature text")

plt.show()

什么是“签名栏”?可以更精确地描述所需的输出是什么吗?我所说的签名栏是指在底部或顶部延伸图形整个宽度的框,在这里我可以写下我的名字和数据源。第53位数字就是这种“签名条”的一个例子。答案很好。你能解释一下这个问题吗。字体大小的单位是多少?谢谢单位是点。Matplotlib使用每英寸72个点(ppi)。例如,要从点计算像素,您需要图形dpi
pixels=fig.dpi/72。
因为答案使用点作为图形坐标中的单位和位置,所以它与图形dpi无关。