tamaño negro matrices libreria letra graficos graficar grafica con color python matplotlib font-size

negro - python graficos 2d



Cómo cambiar el tamaño de fuente en un gráfico de matplotlib (10)

Aquí hay un enfoque totalmente diferente que funciona sorprendentemente bien para cambiar los tamaños de fuente:

¡Cambia el tamaño de la figura !

Usualmente uso código como este:

import matplotlib.pyplot as plt import numpy as np fig = plt.figure(figsize=(4,3)) ax = fig.add_subplot(111) x = np.linspace(0,6.28,21) ax.plot(x, np.sin(x), ''-^'', label="1 Hz") ax.set_title("Oscillator Output") ax.set_xlabel("Time (s)") ax.set_ylabel("Output (V)") ax.grid(True) ax.legend(loc=1) fig.savefig(''Basic.png'', dpi=300)

Cuanto menor sea ​​el tamaño de la figura, mayor será la fuente en relación con el trazado . Esto también aumenta la escala de los marcadores. Nota también puse el dpi o el punto por pulgada. Aprendí esto de una publicación del foro AMTA (American Modeling Teacher of America). Ejemplo del código anterior:

¿Cómo se puede cambiar el tamaño de fuente de todos los elementos (marcas, etiquetas, título) en un gráfico de matplotlib?

Sé cómo cambiar el tamaño de la etiqueta de tick, esto se hace con:

import matplotlib matplotlib.rc(''xtick'', labelsize=20) matplotlib.rc(''ytick'', labelsize=20)

¿Pero cómo se cambia el resto?


Basado en lo anterior:

import matplotlib.pyplot as plt import matplotlib.font_manager as fm fontPath = "/usr/share/fonts/abc.ttf" font = fm.FontProperties(fname=fontPath, size=10) font2 = fm.FontProperties(fname=fontPath, size=24) fig = plt.figure(figsize=(32, 24)) fig.text(0.5, 0.93, "This is my Title", horizontalalignment=''center'', fontproperties=font2) plot = fig.add_subplot(1, 1, 1) plot.xaxis.get_label().set_fontproperties(font) plot.yaxis.get_label().set_fontproperties(font) plot.legend(loc=''upper right'', prop=font) for label in (plot.get_xticklabels() + plot.get_yticklabels()): label.set_fontproperties(font)


De la documentación de matplotlib ,

font = {''family'' : ''normal'', ''weight'' : ''bold'', ''size'' : 22} matplotlib.rc(''font'', **font)

Esto establece la fuente de todos los elementos a la fuente especificada por el objeto kwargs, font .

Alternativamente, también puede usar el método de update rcParams como se sugiere en esta respuesta :

matplotlib.rcParams.update({''font.size'': 22})

o

import matplotlib.pyplot as plt plt.rcParams.update({''font.size'': 22})

Puede encontrar una lista completa de las propiedades disponibles en la página Customizing matplotlib .


Esta es una extensión a la answer Marius Retegan. Puede hacer un archivo JSON separado con todas sus modificaciones y luego cargarlo con rcParams.update. Los cambios solo se aplicarán al script actual. Asi que

import json from matplotlib import pyplot as plt, rcParams s = json.load(open("example_file.json") rcParams.update(s)

y guarde este ''example_file.json'' en la misma carpeta.

{ "lines.linewidth": 2.0, "axes.edgecolor": "#bcbcbc", "patch.linewidth": 0.5, "legend.fancybox": true, "axes.color_cycle": [ "#348ABD", "#A60628", "#7A68A6", "#467821", "#CF4457", "#188487", "#E24A33" ], "axes.facecolor": "#eeeeee", "axes.labelsize": "large", "axes.grid": true, "patch.edgecolor": "#eeeeee", "axes.titlesize": "x-large", "svg.fonttype": "path", "examples.directory": "" }


Estoy totalmente de acuerdo con el profesor Huster en que la forma más sencilla de proceder es cambiar el tamaño de la figura, lo que permite mantener las fuentes predeterminadas. Simplemente tuve que complementar esto con una opción de bbox_inches al guardar la figura como un pdf porque se cortaron las etiquetas del eje.

import matplotlib.pyplot as plt plt.figure(figsize=(4,3)) plt.savefig(''Basic.pdf'', bbox_inches=''tight'')


Si desea cambiar el tamaño de fuente solo para un gráfico específico que ya se ha creado, intente esto:

import matplotlib.pyplot as plt ax = plt.subplot(111, xlabel=''x'', ylabel=''y'', title=''title'') for item in ([ax.title, ax.xaxis.label, ax.yaxis.label] + ax.get_xticklabels() + ax.get_yticklabels()): item.set_fontsize(20)


Si eres un fanático del control como yo, es posible que desees establecer explícitamente todos los tamaños de fuente:

import matplotlib.pyplot as plt SMALL_SIZE = 8 MEDIUM_SIZE = 10 BIGGER_SIZE = 12 plt.rc(''font'', size=SMALL_SIZE) # controls default text sizes plt.rc(''axes'', titlesize=SMALL_SIZE) # fontsize of the axes title plt.rc(''axes'', labelsize=MEDIUM_SIZE) # fontsize of the x and y labels plt.rc(''xtick'', labelsize=SMALL_SIZE) # fontsize of the tick labels plt.rc(''ytick'', labelsize=SMALL_SIZE) # fontsize of the tick labels plt.rc(''legend'', fontsize=SMALL_SIZE) # legend fontsize plt.rc(''figure'', titlesize=BIGGER_SIZE) # fontsize of the figure title

Tenga en cuenta que también puede establecer los tamaños llamando al método rc en matplotlib :

import matplotlib SMALL_SIZE = 8 matplotlib.rc(''font'', size=SMALL_SIZE) matplotlib.rc(''axes'', titlesize=SMALL_SIZE) # and so on ...


Utilice plt.tick_params(labelsize=14)


Actualización: vea la parte inferior de la respuesta para una forma ligeramente mejor de hacerlo.
Actualización # 2: también he descubierto cambiar las fuentes del título de leyenda.
Actualización # 3: Hay un error en Matplotlib 2.0.0 que está causando que las etiquetas de tick para los ejes logarítmicos vuelvan a la fuente predeterminada. Debería arreglarse en 2.0.1, pero he incluido la solución en la segunda parte de la respuesta.

Esta respuesta es para cualquiera que intente cambiar todas las fuentes, incluso para 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 enfrentar 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, al tener varios diccionarios de fuentes, puede elegir diferentes fuentes / tamaños / pesos / colores para los distintos títulos, elegir la fuente para las etiquetas de marca y elegir la fuente para la leyenda, todas de forma independiente.

ACTUALIZAR:

He desarrollado un enfoque ligeramente diferente y menos saturado que elimina los diccionarios de fuentes y permite cualquier fuente en su sistema, incluso las 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 esta sea una respuesta integral.


matplotlib.rcParams.update({''font.size'': 22})