2011-03-16 79 views
20

是否可以確定matplotlib文本對象的尺寸?我怎樣才能找到像素的寬度和高度?Matplotlib文字尺寸

感謝

編輯:我想,我想出了一個辦法做到這一點。我在下面包含了一個例子。

import matplotlib as plt 

f = plt.figure() 
r = f.canvas.get_renderer() 
t = plt.text(0.5, 0.5, 'test') 

bb = t.get_window_extent(renderer=r) 
width = bb.width 
height = bb.height 
+0

你的意思''T = plt.text(0.5,0.5 ,'test')'' – nedim 2015-07-16 10:27:12

+0

你爲什麼不加這個作爲答案?我試過了,雖然我不知道如何驗證其準確性,但它會返回一致的結果 – nedim 2015-07-17 09:07:55

+0

這可能是我見過的關於MatPlotLib的最省時的信息。謝謝你,上帝該死的太多了! – 2016-04-01 13:27:57

回答

7
import matplotlib as plt 

f = plt.figure() 
r = f.canvas.get_renderer() 
t = plt.text(0.5, 0.5, 'test') 

bb = t.get_window_extent(renderer=r) 
width = bb.width 
height = bb.height 
9

即使在draw()事件之後,我也無法找到獲取文本擴展盤區的情況。

但這裏是從它呈現只是文本,並獲得各種幾何信息的方式:

t = matplotlib.textpath.TextPath((0,0), 'hello', size=9, prop='WingDings') 
bb = t.get_extents() 

#bb: 
#Bbox(array([[ 0.759375 , 0.8915625], 
#   [ 30.4425 , 5.6109375]])) 

w = bb.width #29.683125 
h = bb.height #4.7193749 

編輯

我一直在玩這個了一下,我有一個不一致我不明白。也許別人可以幫忙。規模顯得過,我不知道這是否是一個DPI的問題或錯誤或什麼,但這個例子相當多解釋說:

import matplotlib 
from matplotlib import pyplot as plt 
plt.cla() 

p = plt.plot([0,10],[0,10]) 

#ffam = 'comic sans ms' 
#ffam = 'times new roman' 
ffam = 'impact' 
fp = matplotlib.font_manager.FontProperties(
    family=ffam, style='normal', size=30, 
    weight='normal', stretch='normal') 

txt = 'The quick brown fox' 
plt.text(100, 100, txt, fontproperties=fp, transform=None) 

pth = matplotlib.textpath.TextPath((100,100), txt, prop=fp) 
bb = pth.get_extents() 

# why do I need the /0.9 here?? 
rec = matplotlib.patches.Rectangle(
    (bb.x0, bb.y0), bb.width/0.9, bb.height/0.9, transform=None) 
plt.gca().add_artist(rec) 

plt.show() 
+1

我似乎沒有文本路徑模塊。這是你必須添加到matplotlib的東西嗎? – David 2011-03-17 02:10:28

+0

@David。你使用的是什麼版本的matplotlib?運行時會出現什麼錯誤:'from matplotlib import textpath' – Paul 2011-03-17 02:40:37

+0

我使用的是版本0.99.1.1。我得到的錯誤是'ImportError:無法導入名稱文本路徑' – David 2011-03-17 02:46:42