Python con matplotlib - reutilizando funciones de dibujo
-
06-07-2019 - |
Pregunta
Tengo una pregunta de seguimiento a esta pregunta .
¿Es posible racionalizar la generación de figuras al tener múltiples scripts de Python que funcionan en diferentes partes de la figura?
Por ejemplo, si tengo las siguientes funciones:
Función A: dibujar un histograma de algo
Función B: Dibuja un cuadro con un texto adentro
Función C: Dibuja un diagrama de algo C
FunctionD: Dibuja un diagrama de algo D
¿Cómo hago para reutilizar las funciones anteriores en diferentes scripts? Si quisiera, por ejemplo, crear una figura con un histograma con una gráfica de algo C, de alguna manera llamaría a FunctionA y FunctionC desde mi script. O, si quisiera una figura con las dos parcelas, llamaría a FunctionC y FunctionD.
No estoy seguro si me estoy explicando claramente, pero otra forma de hacer esta pregunta es esta: ¿cómo paso un objeto figura a una función y luego hago que la función dibuje algo al objeto figura pasado y luego ¿devolverlo al guión principal para agregar otras cosas como el título o algo así?
Solución
Aquí desea utilizar los Objetos de artista y pasarlos según sea necesario para las funciones:
import numpy as np
import matplotlib.pyplot as plt
def myhist(ax, color):
ax.hist(np.log(np.arange(1, 10, .1)), facecolor=color)
def say_something(ax, words):
t = ax.text(.2, 20., words)
make_a_dim_yellow_bbox(t)
def make_a_dim_yellow_bbox(txt):
txt.set_bbox(dict(facecolor='yellow', alpha=.2))
fig = plt.figure()
ax0 = fig.add_subplot(1,2,1)
ax1 = fig.add_subplot(1,2,2)
myhist(ax0, 'blue')
myhist(ax1, 'green')
say_something(ax0, 'this is the blue plot')
say_something(ax1, 'this is the green plot')
plt.show()
Otros consejos
Okey, he descubierto cómo hacer esto. Fue mucho más simple de lo que había imaginado. Solo requirió un poco de lectura aquí con el figura y clases .
En su script principal:
import pylab as plt
import DrawFns
fig = plt.figure()
(do something with fig)
DrawFns.WriteText(fig, 'Testing')
plt.show()
En su DrawFns.py:
def WriteText(_fig, _text):
[indent]_fig.text(0, 0, _text)
¡Y eso es todo! Y puedo agregar más funciones en DrawFns.py y llamarlas desde cualquier script siempre que estén incluidas en la llamada import
. : D