2015-01-07 9 views
6

Sto cercando un modo carino per ottenere il nome del carattere predefinito che viene utilizzato da matplotlib.pyplot. documentation indica che il carattere è selezionato dall'elenco in rcParams ['font.family'] che è ordinato dall'alto in basso per priorità. Il mio primo tentativo è stato quello di verificare la presenza di avvertimenti, vale a dire,Scopri quale carattere usa matplotlib

import matplotlib.pyplot as plt 
import warnings 

for font in plt.rcParams['font.sans-serif']: 
    print font 
    with warnings.catch_warnings(record=True) as w: 
     warnings.simplefilter("always") 
     plt.rcParams['font.family'] = font 
     plt.text(0,0,font) 
     plt.savefig(font+'.png') 

     if len(w): 
      print "Font {} not found".format(font) 

che mi dà

Bitstream Vera Sans 
Font Bitstream Vera Sans not found 
DejaVu Sans 
Lucida Grande 
Font Lucida Grande not found 
Verdana 
Geneva 
Font Geneva not found 
Lucid 
Font Lucid not found 
Arial 
Helvetica 
Font Helvetica not found 
Avant Garde 
Font Avant Garde not found 
sans-serif 

posso dire che su questa macchina, DejaVu Sans è usato da matplotlib.pyplot. Tuttavia, ho pensato che ci dovrebbe essere un modo più semplice per ottenere queste informazioni.

Edit:

L'avviso può essere attivato direttamente tramite

matplotlib.font_manager.findfont(matplotlib.font_manager.FontProperties(family=font)) 

risposta

6

Per ottenere la famiglia di caratteri:

matplotlib.rcParams['font.family'] 

Se si tratta di un generale famiglia di font come 'sans-serif ', usa fontfind per trovare il carattere attuale:

>>> from matplotlib.font_manager import findfont, FontProperties 
>>> font = findfont(FontProperties(family=['sans-serif'])) 
>>> font 
'/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/matplotlib/mpl-data/fonts/ttf/Vera.ttf' 

ho trovato questo nei test unitari del font_manager: https://github.com/matplotlib/matplotlib/blob/4314d447dfc7127daa80fa295c9bd56cf07faf01/lib/matplotlib/tests/test_font_manager.py

+0

Questo mi dà 'Arial'. findfont restituirà semplicemente il file di font che corrisponde strettamente all'oggetto fontproperty dato. – alodi

+0

Bene, ho pensato che il tuo problema è determinare il font se è "unset", come "sans-serif". Poiché altrimenti si usa semplicemente 'matplotlib.rcParams ['font.family']' – tamasgal

+0

Hai capito correttamente la domanda. Sto cercando di trovare il font non specificato che si nasconde dietro 'sans-serif'. Ma il tuo codice mi dà 'Arial' invece di' DejaVu Sans'. – alodi

Problemi correlati