Matplotlib: Times New Roman aparece en negrita

Por alguna razón, al usar Times New Roman en mis gráficos de mpl , aparece en negrita. Otras fonts están bien.

Aquí hay un ejemplo mínimo, y el resultado (dentro de un documento de Word, para compararlo con lo que espero que parezca Times New Roman).

 import matplotlib as mpl import matplotlib.pyplot as plt with plt.style.context('word'): fig = plt.figure(1, figsize=(3.4, 2.1)) ax1 = plt.subplot(111) ax1.plot([1,2,3,4,5], '+--') ax1.text(0.5, 3.5, r"Brown $\alpha + 12 \sum_ix$") ax1.text(0.5, 3, r"1.0 2.0") ax1.set_xlabel('normal 1.0 and math $1.0$') ax1.set_ylabel('Times New Roman') plt.tight_layout() fig.savefig('word.pdf') 

con la word hoja de estilo que contiene

 backend: PS text.usetex: False font.family: serif font.serif: Times New Roman font.size: 11 axes.titlesize: 11 axes.labelsize: 11 

La ttwig se incluye en el documento con su tamaño real (3.4 ” por 2.1 ”).

La fuente se encuentra correctamente y también funciona en modo matemático (vea el alfa en la gráfica). Simplemente parece que esto es audaz …

introduzca la descripción de la imagen aquí

Sé que la pregunta es muy antigua, pero sigue siendo un problema, al menos para mí en mi Mac. Encontré una solución muy fácil para este problema, publicada por azag0 en github

 del matplotlib.font_manager.weight_dict['roman'] matplotlib.font_manager._rebuild() 

https://github.com/matplotlib/matplotlib/issues/5574

Examinando más detalles, me di cuenta de que el error es real y que mpl está seleccionando una fuente Times New Roman Bold.

El algoritmo de selección de fuente en font_manger.py asigna pesos a cada fuente que encuentra en función de la familia, variante, peso, etc. (alrededor de la línea 1290). El “nombre” que viene de Times New Roman Bold.ttf es solo ‘Times New Roman’, lo que podría tener sentido, pero el peso es 500, el mismo valor que la fuente normal:

  with score 0.1  with score 0.1 

En mi configuración de Mac y Linux, el en negrita se encuentra primero y se selecciona con el código

  if score < best_score: best_score = score best_font = font 

El parche sucio es reemplazar < por <= ...

Eliminando ~/.cache/matplotlib/ solucioné el problema por mí.