Notación científica en el eje (estilo literario): ¿cómo cambiar la fuente predeterminada?
Necesito una notación científica de estilo literario en ambos ejes en matplotlib con una fuente específica.
En mi búsqueda encontré esta pregunta con una respuesta para notación científica de estilo literario de ImportanceOfBeingErnest: Mostrar lugares decimales y notación científica en el eje.
Sin embargo, no hay detalles sobre cómo cambiar la fuente.
Mi código:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as mticker
fig,ax=plt.subplots(1,1,figsize=[7,7])
x=np.linspace(0,0.1,10**3)
y=x**2
ax.plot(x,y)
# code from ImportanceOfBeingErnest
class MathTextSciFormatter(mticker.Formatter):
def __init__(self, fmt="%1.2e"):
self.fmt = fmt
def __call__(self, x, pos=None):
s = self.fmt % x
decimal_point = '.'
positive_sign = '+'
tup = s.split('e')
significand = tup[0].rstrip(decimal_point)
sign = tup[1][0].replace(positive_sign, '')
exponent = tup[1][1:].lstrip('0')
if exponent:
exponent = '10^{%s%s}' % (sign, exponent)
if significand and exponent:
s = r'%s{\times}%s' % (significand, exponent)
else:
s = r'%s%s' % (significand, exponent)
return "${}$".format(s)
# Format with 2 decimal places
plt.gca().xaxis.set_major_formatter(MathTextSciFormatter("%1.2e"))
plt.gca().yaxis.set_major_formatter(MathTextSciFormatter("%1.2e"))
# end of code from ImportanceOfBeingErnest
plt.xticks(rotation=45,font="Arial",fontsize=20)
for tick in ax.get_yticklabels():
tick.set_fontname("Arial")
Resultado: gráfico a partir del código
Se implementa la notación científica de estilo literario, pero ninguno de los dos métodos de cambio de fuente funciona. Curiosamente, el tamaño de fuente se puede cambiar.
¿Alguien podría proporcionar una solución para cambiar la fuente con esta notación?
matplotlib 3.5.3
Está utilizando matplotlib
el procesador de texto matemático interno de 's con r'$...$'
sintaxis, pero está cambiando la fuente solo para texto normal. Podrías usar
import matplotlib as mpl
mpl.rcParams["mathtext.fontset"] = 'custom'
mpl.rcParams['mathtext.rm']='Arial'
para cambiar las fuentes matemáticas en todas partes, que es probablemente lo que buscas. Preferiría Arimo , que es una fuente gratuita métricamente compatible con Arial. Consulte la documentación para obtener detalles sobre cómo personalizar fuentes individuales en negrita, caligráficas, etc.
Alternativamente, puede utilizar un renderizador TeX externo con
mpl.rc('text', usetex=True)
pero deberá proporcionar el preámbulo de LaTeX necesario para utilizar la fuente Arial.