2011-03-16 23 views
20

¿Es posible determinar las dimensiones de un objeto de texto matplotlib? ¿Cómo puedo encontrar el ancho y alto en píxeles?Matplotlib texto dimensiones

Gracias

Editar: Creo que me di cuenta de una manera de hacer esto. He incluido un ejemplo a continuación.

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

¿Quiere decir '' t = plt.text (0,5, 0,5 , 'prueba') '' – nedim

+0

¿Por qué no agrega esto como respuesta? Lo probé, devuelve resultados consistentes aunque no sé cómo verificar su precisión – nedim

+0

Esta es probablemente la información más rápida que he visto sobre MatPlotLib. ¡Gracias, maldito sea Dios! –

Respuesta

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

no pude encontrar una manera de conseguir la extensión de texto como prestados en una parcela incluso después de un evento draw().

Pero aquí es una manera de hacer que sólo el texto y obtener todo tipo de información geométrica de ella:

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 

Editar

He estado jugando con esto por un poco y tengo una incoherencia que no puedo descifrar. Tal vez alguien más puede ayudar. La escala parece fuera y no sé si es un problema ppp o un fallo, o qué, pero este ejemplo explica más o menos:

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

Parece que no tengo el módulo de ruta de texto. ¿Es esto algo que tuviste que agregar a matplotlib? – David

+0

@David. ¿Qué versión de matplotlib estás usando? ¿Qué error obtienes cuando ejecutas: 'from matplotlib import textpath' – Paul

+0

Estoy usando la versión 0.99.1.1. El error que recibo es 'ImportError: no puedo importar el nombre de ruta de texto' – David

Cuestiones relacionadas