Подтвердить что ты не робот

Python с matplotlib - повторное использование функций рисования

У меня есть следующий вопрос к question.

Возможно ли оптимизировать генерацию фигуры с помощью нескольких сценариев python, которые работают на разных частях рисунка?

Например, если у меня есть следующие функции:

ФункцияA: Нарисуйте гистограмму чего-нибудь
FunctionB: нарисуйте поле с текстом в нем
FunctionC: Нарисуйте сюжет что-то C
FunctionD: Нарисуйте график чего-то D

Как мне использовать повторное использование вышеуказанных функций в разных сценариях? Если бы я хотел, например, создать фигуру с гистограммой с сюжетом чего-то C, я бы как-то позвонил FunctionA и FunctionC из моего script. Или, если бы мне нужна фигура с двумя графиками, я бы назвал FunctionC и FunctionD.

Я не уверен, что я объясняю себя четко, но другой способ задать этот вопрос: как передать объект фигуры функции, а затем заставить функцию нарисовать что-то для прошедшего объекта фигуры, а затем верните его обратно в основной script, чтобы добавить другие вещи, такие как название или что-то еще?

4b9b3361

Ответ 1

Здесь вы хотите использовать объекты Artist и передавать их по мере необходимости в функции:

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

alt text

Ответ 2

Okey, я понял, как это сделать. Это было намного проще, чем я себе представлял. Это просто потребовало немного чтения здесь с figure и axes.

В главном script:

import pylab as plt  
import DrawFns  
fig = plt.figure()  
(do something with fig)  
DrawFns.WriteText(fig, 'Testing')  
plt.show()

В вашей DrawFns.py:

def WriteText(_fig, _text):  
[indent]_fig.text(0, 0, _text)

И это! И я могу добавить дополнительные функции в DrawFns.py и вызвать их из любого script, если они включены в вызов import.: D