fmt python matplotlib idioms

python - fmt - La forma preferida de establecer las propiedades de figura/ejes de matplotlib



plot() python (4)

Digamos que tengo un eje de matplotlib llamado ax , y quiero establecer varias de sus propiedades. Actualmente, lo hago así:

ax.set_yscale(''log'') ax.set_xlim([0,10]) ax.set_xlabel(''some label'')

Pero se vuelve tedioso después de un tiempo. Entonces me encontré con este método:

ax.set(yscale=''log'', xlim=[0,10], xlabel=''some label'')

Mucho más conciso, pero parece un poco indocumentado. Me refiero a que toda la documentación dice que es "Un comando tkstyle set, pasar kwargs para establecer propiedades".

¿Cuál es la forma preferida o idiomática? ¿Es estable el método set api?


Como un seguimiento súper tardío a esta pregunta:

ax.set_xlim(4) y ax.set(xlim=4) son en última instancia lo mismo, así que haz lo que quieras. ax.set(kwarg=foo) llama a ax.set_kwarg(foo) través de alguna manipulación de cadenas, como puede ver si observa la fuente. Las diversas funciones de establecimiento también son en su mayoría de una sola línea, pero existen para permitir que setp el conjunto introspectivo.


Generalmente uso la interfaz pyplot (interactiva) para matplotlib, que expone la función setp (que uso muy a menudo).

matplotlib admite el uso de setp () ("propiedad set") y getp () para establecer y obtener propiedades del objeto, así como para hacer introspección en el objeto.

Lo que le permite hacer cosas como su función de set anterior, solo usted pasa el objeto para establecerlo como parámetro:

>>> x = arange(0,1.0,0.01) >>> y1 = sin(2*pi*x) >>> y2 = sin(4*pi*x) >>> lines = plot(x, y1, x, y2) >>> setp(lines, linewidth=2, color=''r'')

Supongo que la función setp realidad llama a la función set del objeto pasado que funciona para localizar y configurar los kwargs .

Mi opinión es que, a pesar de la falta de documentación, el método de set del objeto es el enfoque idiomático para establecer múltiples parámetros a través de kwargs en lugar de línea por línea.

Mis 2 centavos.


Tengo problemas similares con el backend de matplotlib y por eso me topé con esta publicación. Esperaba que matplotlib permitiera el uso del control de diccionario para las propiedades en una parcela. Usando la sugerencia de @Chris Zeh usted podría:

f = {''xlabel'': ''x1'', ''ylabel'': ''x2''} [setp(ax, formati, formatj) for formati, formatj in f.items()]

Lo que resuelve mis problemas. Espero que esto ayude.


El tutorial de Pyplot parece recomendar funciones ax.set_xxx() , pero también menciona .setp(xxx=) .

Por otro lado, la función .set(xxx=) no se usa y .setp(xxx=) , aunque está documentada, no se usa en ningún ejemplo ( API de Pyplot ).

Entiendo que matplotlib admite tanto el estilo de programación imperativo como el estilo similar a matlab. La razón es la base de usuarios objetivo: aquellos que ya están familiarizados con Python y los que usaron Matlab anteriormente.

Concluyo que la api recomendada por .set_xxx() es .set_xxx() .

Un cheque rápido a través de la gallery confirma.

Existe una dualidad similar para los argumentos de palabras clave para representar funciones, excepto que la API imperativa no es tan obvia.