2016-01-08 100 views
2

可以使用参数horizontalalignmentha)和verticalalignmentva)参数(例如,文本框)指定文本框的对齐方式。*边界框内的文本对齐*

import matplotlib.pyplot as plt 
fig, ax = plt.subplots(figsize=(8,5)) 
plt.subplots_adjust(right=0.5) 
txt = "Test:\nthis is some text\ninside a bounding box." 
fig.text(0.7, 0.5, txt, ha='left', va='center') 

主要生产:

enter image description here

反正是有保持相同的包围盒(bbox)对齐,而改变这种边界框内文本的对齐方式?例如文本要在边界框中居中。

(显然,在这种情况下,我可以只更换边界框,但在更复杂的情况,我想单独更改文本的对齐方式。)

回答

1

确切BBOX取决于特定的后端渲染器。以下示例保留文本bbox的x位置。精确保留x和y有点困难:

import matplotlib 
import matplotlib.pyplot as plt 


def get_bbox(txt): 
    renderer = matplotlib.backend_bases.RendererBase() 
    return txt.get_window_extent(renderer) 

fig, ax = plt.subplots(figsize=(8,5)) 
plt.subplots_adjust(right=0.5) 
txt = "Test:\nthis is some text\ninside a bounding box." 
text_inst = fig.text(0.7, 0.5, txt, ha='left', va='center') 

bbox = get_bbox(text_inst) 
bbox_fig = bbox.transformed(fig.transFigure.inverted()) 
print "original bbox (figure system)\t:", bbox.transformed(fig.transFigure.inverted()) 

# adjust horizontal alignment 
text_inst.set_ha('right') 
bbox_new = get_bbox(text_inst) 
bbox_new_fig = bbox_new.transformed(fig.transFigure.inverted()) 
print "aligned bbox\t\t\t:", bbox_new_fig 

# shift back manually 
offset = bbox_fig.x0 - bbox_new_fig.x0 
text_inst.set_x(bbox_fig.x0 + offset) 
bbox_shifted = get_bbox(text_inst) 
print "shifted bbox\t\t\t:", bbox_shifted.transformed(fig.transFigure.inverted()) 
plt.show() 
+0

这仍然会改变整个边界框,而不仅仅是其中的文本。 – DilithiumMatrix

+0

有趣,谢谢。这基本上是我一直在使用的方法(除非我没有看到“倒转”方法 - 真的很酷!)。我猜这里没有任何内置的方法。 – DilithiumMatrix