Python com matplotlib - reutilizar funções de desenho
-
06-07-2019 - |
Pergunta
Eu tenho um acompanhamento pergunta a esta questão .
É possível agilizar a geração figura por ter vários scripts python que o trabalho em diferentes partes da figura?
Por exemplo, se eu tiver as seguintes funções:
functiona: Desenhar um histograma de algo
FunctionB: Desenhe uma caixa com um texto em que
FunctionC: Compre um lote de algo C
FunctionD: Compre um lote de algo D
Como eu faço para reutilizar as funções acima em diferentes roteiros? Se eu quisesse, por exemplo, para criar uma figura com um histograma com um enredo de algo C, eu de alguma forma chamar functiona e FunctionC do meu script. Ou, se eu queria uma figura com as duas parcelas, eu chamaria FunctionC e FunctionD.
Eu não tenho certeza se eu estou me explicar com clareza, mas uma outra maneira de fazer esta pergunta é esta: como faço para passar um objeto de valor para uma função e, em seguida, tem a função de sorteio algo para a figura objeto passado e, em seguida, devolvê-lo de volta para o script principal para adicionar outras coisas como o título ou algo assim?
Solução
Aqui você quiser usar o artista objetos , e passá-las conforme necessário para as funções:
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()
Outras dicas
Okey, eu descobri como fazer isso. Era muito mais simples do que eu tinha imaginado. É apenas necessário um pouco de leitura aqui com o figura e noreferrer eixos classes.
No seu script principal:
import pylab as plt
import DrawFns
fig = plt.figure()
(do something with fig)
DrawFns.WriteText(fig, 'Testing')
plt.show()
Em seu DrawFns.py:
def WriteText(_fig, _text):
[indent]_fig.text(0, 0, _text)
E é isso! E eu posso acrescentar mais funções em DrawFns.py e chamá-los a partir de qualquer script, enquanto eles estão incluídos com chamada import
. : D