Actualización: Ver la parte inferior de la respuesta de una manera un poco mejor de hacerlo
Actualización n. ° 2: He descubierto el cambio de las fuentes del título de la leyenda también.
Actualización n. ° 3: Hay un bug in Matplotlib 2.0.0 que está haciendo que las etiquetas de tilde para los ejes logarítmicos reviertan a la fuente predeterminada. Debe arreglarse en 2.0.1 pero he incluido la solución en la segunda parte de la respuesta.
Esta respuesta es para cualquier persona que intente cambiar todas las fuentes, incluida la leyenda, y para cualquiera que intente usar diferentes fuentes y tamaños para cada cosa. No usa rc (que no parece funcionar para mí). Es bastante engorroso, pero no pude entender personalmente ningún otro método. Básicamente, combina la respuesta de Ryggyr aquí con otras respuestas en SO.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
# Set the font dictionaries (for plot title and axis titles)
title_font = {'fontname':'Arial', 'size':'16', 'color':'black', 'weight':'normal',
'verticalalignment':'bottom'} # Bottom vertical alignment for more space
axis_font = {'fontname':'Arial', 'size':'14'}
# Set the font properties (for use in legend)
font_path = 'C:\Windows\Fonts\Arial.ttf'
font_prop = font_manager.FontProperties(fname=font_path, size=14)
ax = plt.subplot() # Defines ax variable by creating an empty plot
# Set the tick labels font
for label in (ax.get_xticklabels() + ax.get_yticklabels()):
label.set_fontname('Arial')
label.set_fontsize(13)
x = np.linspace(0, 10)
y = x + np.random.normal(x) # Just simulates some data
plt.plot(x, y, 'b+', label='Data points')
plt.xlabel("x axis", **axis_font)
plt.ylabel("y axis", **axis_font)
plt.title("Misc graph", **title_font)
plt.legend(loc='lower right', prop=font_prop, numpoints=1)
plt.text(0, 0, "Misc text", **title_font)
plt.show()
La ventaja de este método es que, por varios diccionarios de fuentes que tiene, puede elegir diferentes fuentes/tamaños/pesos/colores para los distintos títulos, elegir el tipo de letra para las etiquetas señalizadoras, y elegir el tipo de letra para la leyenda, todo de forma independiente.
ACTUALIZACIÓN:
He elaborado un enfoque ligeramente diferente, menos desordenada que elimina los diccionarios de fuentes, y permite que cualquier fuente del sistema, incluso fuentes .otf. Para tener fuentes separadas para cada cosa, simplemente escriba más font_path
y font_prop
como variables.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as font_manager
import matplotlib.ticker
# Workaround for Matplotlib 2.0.0 log axes bug https://github.com/matplotlib/matplotlib/issues/8017 :
matplotlib.ticker._mathdefault = lambda x: '\\mathdefault{%s}'%x
# Set the font properties (can use more variables for more fonts)
font_path = 'C:\Windows\Fonts\AGaramondPro-Regular.otf'
font_prop = font_manager.FontProperties(fname=font_path, size=14)
ax = plt.subplot() # Defines ax variable by creating an empty plot
# Define the data to be plotted
x = np.linspace(0, 10)
y = x + np.random.normal(x)
plt.plot(x, y, 'b+', label='Data points')
for label in (ax.get_xticklabels() + ax.get_yticklabels()):
label.set_fontproperties(font_prop)
label.set_fontsize(13) # Size here overrides font_prop
plt.title("Exponentially decaying oscillations", fontproperties=font_prop,
size=16, verticalalignment='bottom') # Size here overrides font_prop
plt.xlabel("Time", fontproperties=font_prop)
plt.ylabel("Amplitude", fontproperties=font_prop)
plt.text(0, 0, "Misc text", fontproperties=font_prop)
lgd = plt.legend(loc='lower right', prop=font_prop) # NB different 'prop' argument for legend
lgd.set_title("Legend", prop=font_prop)
plt.show()
Esperemos que esto es una respuesta integral
agradable, excepto que anula cualquier propiedad tamaño de fuente que se encuentra en su camino e_e – yota
¿Dónde puedo encontrar más opciones para los elementos como ' 'family'','' weight'', etc.? – haccks
@haccks Agregué un enlace a la página de matplotlib de personalización en la respuesta. –