2016-01-08 96 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