2011-03-16 19 views
20

Matplotlib text nesnesinin boyutlarını belirlemek mümkün mü? Piksel cinsinden genişlik ve yüksekliği nasıl bulabilirim?Matplotlib text boyutları

Teşekkür

Düzenleme: Ben bunu yapmanın bir yolu buldum. Aşağıda bir örnek ekledim.

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

Sen '' t plt.text (0.5, 0.5 = demek , 'test') '' – nedim

+0

Bunu neden bir cevap olarak eklemiyorsunuz? Bunu denedim, tutarlılıklarını nasıl doğrulayacağını bilmeme rağmen tutarlı sonuçlar döndürüyor – nedim

+0

Bu, MatPlotLib ile ilgili olarak gördüğüm bilgilerin muhtemelen zaman kazandıran en iyi bilgisi. Teşekkür ederim çok lanet olsun! –

cevap

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

Bir draw() olayından sonra bile bir metin üzerinde oluşturulmuş metin uzantıları elde etmenin bir yolunu bulamadım.

Ama burada ondan geometrik her türlü bilgi sadece metin oluşturmak ve almak için bir yolu şudur:

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 

Düzenleme

ben biraz bununla oynuyorum ve ben bir tutarsızlık anlayamadım. Belki başka biri yardımcı olabilir. ölçek kapalı görünüyor ve bir dpi sorunu veya bir hata ya da buysa bilmiyorum ama bu örnek oldukça fazla açıklıyor:

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

Metin yolu modülüne sahip değilim. Matplotlib'e eklemeniz gereken bir şey mi? – David

+0

@David. Matplotlib'in hangi sürümünü kullanıyorsunuz? Çalıştırırken ne tür bir hata: "matplotlib import textpath" öğesinden – Paul

+0

sürüm 0.99.1.1 kullanıyorum. Aldığım hata 'ImportError: ad textpath 'içe aktarılamıyor' – David