Matplotlib:Line2D高度(以像素为单位)

时间:2017-09-13 10:09:23

标签: python matplotlib

我有例如在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像素。

如何获取有关线条高度的信息?或者有更好的方法来制作文本吗?

Text next to a straight line

1 个答案:

答案 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

enter image description here