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?

Foi útil?

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()

text alt

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top