我有例如在matplotlib中绘制的以下行
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(2,1,1) # two rows, one column, first plot
# This should be a straight line which spans the y axis
# from 0 to 50
line, = ax.plot([0]*50, range(50), color='blue', lw=2)
line2, = ax.plot([10]*100, range(100), color='blue', lw=2)
如何在y方向上得到直线的像素数?
注意:我有几条线之间有间隙,我想把文字放在它们旁边,但是,如果有太多的线条,我需要知道我可以添加多少文字,即我之所以需要这条线的高度。
例如,在附图中,右侧有一条蓝线,高度约为160像素。在160像素的高度(使用我使用的字体)我可以容纳大约8行文本,因为文本的高度大约是12像素。
如何获取有关线条高度的信息?或者有更好的方法来制作文本吗?
答案 0 :(得分:1)
为了获得以像素为单位的线条高度,您可以使用其边界框。要确保边界框是画布上绘制的线条,您首先需要绘制画布。然后通过.line2.get_window_extent()
获得边界框。然后,边界框({{1}})的上端与下端(y1
)之间的差异是您要查找的像素数。
y0
为了在线的y范围内绘制文本,以下内容可能有用。给出点数的字体大小,例如fig.canvas.draw()
bbox = line2.get_window_extent(fig.canvas.get_renderer())
# at this point you can get the line height:
print "Lineheight in pixels: ", bbox.y1 - bbox.y0
,您可以计算像素大小,然后计算可能适合上面确定的像素范围的文本行数。使用混合变换,其中x以数据单位表示,y以像素为单位,允许您以数据单位(此处为fontsize = 12
)指定x坐标,但以坐标为单位的y坐标以像素为单位计算线。
x=8