¿Por qué la configuración de la fuente? la familia en matplotlibrc no reflejada?

Uso macOS y python3.7.
Estoy teniendo problemas para configurar fuentes en Matplotlib. Estoy tratando de configurar la fuente a Times New Roman en Matplotlib.

En el archivo matplotlibrc (que se encuentra en /Users/my_name/.pyenv/versions/anaconda3-2019.10/lib/python3.7/site-packages/matplotlib/mpl-data), Cambié
#font.family: sans-serif en font.family: serif
y
#font.serif: DejaVu Serif, ..., Times New Roman, ... en font.serif: Times New Roman, ...

Después de establecer el archivo matplotlibrc como se describe anteriormente, invoqué el shell interactivo escribiendo python en la terminal.

>>> import matplotlib as mpl
>>> import matplotlib.pyplot as plt
>>> mpl.matplotlib_fname()
'/Users/my_name/.pyenv/versions/anaconda3-2019.10/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc'
>>> plt.rcParams['font.family']
['serif']
>>> plt.rcParams['font.serif']
['Times New Roman', 'DejaVu Serif', 'Bitstream Vera Serif', 'Computer Modern Roman', 'New Century Schoolbook', 'Century Schoolbook L', 'Utopia', 'ITC Bookman', 'Bookman', 'Nimbus Roman No9 L', 'Times', 'Palatino', 'Charter', 'serif']

Como puede ver más arriba, los ajustes se han aplicado con éxito hasta ahora.
Pero, cuando creé el principal. py se muestra a continuación


import matplotlib as mpl
import matplotlib.pyplot as plt

print(mpl.matplotlib_fname())
print(plt.rcParams["font.family"])
print(plt.rcParams['font.serif'])

y lo corrió con python main.py en la terminal. La producción fue

/Users/my_name/.pyenv/versions/anaconda3-2019.10/lib/python3.7/site-packages/matplotlib/mpl-data/matplotlibrc
['sans-serif']
['Times New Roman', ..., 'serif']

y resulta que la fuente. no se refleja el entorno familiar.
Cuando realmente creé el gráfico, la fuente Times New Roman no fue aplicada. Además, añadí
print(plt.rcParams["font.sans-serif"])
a la central. py y la salida
['Arial', 'Liberation Sans', 'DejaVu Sans', 'Bitstream Vera Sans', 'sans-serif']
, que es diferente de la configuración
#font.sans-serif: DejaVu Sans, Bitstream Vera Sans, Computer Modern Sans Serif, Lucida Grande, Verdana, Geneva, Lucid, Arial, Helvetica, Avant Garde, sans-serif
en el matplotlibrc.

En la concha interactiva, plt.rcParams["font.sans-serif"] Producción correcta #font.sans-serif: DejaVu Sans, ... como se describe en el matplotlibrc.

Agradecería que alguien pudiera decirme por qué esto está sucediendo cuando los ajustes fueron reflejados en la concha interactiva. No estoy muy confiado en mi inglés, así que por favor hágame saber si hay algo que sea difícil de entender.

Muchas gracias.

Pregunta hecha hace 3 años, 4 meses, 13 días - Por stackscripter


2 Respuestas:

  • El problema que estás experimentando con la configuración de la fuente en Matplotlib probablemente se deba a que estás sobrescribiendo las configuraciones en otro lugar dentro de tu script.

    Cuando ejecutas el script main.py, es posible que estés estableciendo la configuración de la fuente después de la importación de Matplotlib, lo que podría causar que las configuraciones previas se sobrescriban.

    Para evitar este problema, te recomendaría que hagas lo siguiente:

    • Asegúrate de configurar la fuente antes de cualquier otra operación con Matplotlib en tu script `main.py`. Por ejemplo:
    python
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    
    

    Configurar la fuente antes de realizar cualquier otra operación

    plt.rcParams['font.family'] = 'serif' plt.rcParams['font.serif'] = ['Times New Roman'] print(mpl.matplotlib_fname()) print(plt.rcParams["font.family"]) print(plt.rcParams['font.serif'])
    • Comprueba que no hayas establecido la configuración de la fuente en otro archivo de configuración o en otra parte de tu entorno que pueda estar sobrescribiendo las configuraciones que has realizado en `matplotlibrc`.

    Siguiendo estos pasos, deberías poder asegurarte de que la configuración de la fuente se refleje correctamente en tus gráficos con Matplotlib. Espero que esta información te sea de ayuda. ¡Déjame saber si tienes alguna otra pregunta o inquietud!

    Respondida el Dec 18, 2020 a las 11:47 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Causa:

    El problema surge porque estás importando matplotlib dos veces en tu script main.py. La primera vez, importas matplotlib como mpl, y la segunda vez, importas matplotlib como matplotlib. Esto carga dos configuraciones de matplotlibrc diferentes en la memoria.

    Solución:

    Para resolver este problema, solo debes importar matplotlib una vez en tu script main.py. Aquí tienes el código corregido:

    python
    import matplotlib.pyplot as plt
    
    print(plt.rcParams["font.family"])
    print(plt.rcParams['font.serif'])
    

    Esto importará matplotlib y cargará la configuración de matplotlibrc correctamente, reflejando la fuente Times New Roman en tus gráficos.

    Respondida el Dec 18, 2020 a las 11:57 - por Gemini

    Votos positivos: 0 | Votos negativos: 0