Python с matplotlib - повторное использование функций рисования
У меня есть следующий вопрос к question.
Возможно ли оптимизировать генерацию фигуры с помощью нескольких сценариев python, которые работают на разных частях рисунка?
Например, если у меня есть следующие функции:
ФункцияA: Нарисуйте гистограмму чего-нибудь
FunctionB: нарисуйте поле с текстом в нем
FunctionC: Нарисуйте сюжет что-то C
FunctionD: Нарисуйте график чего-то D
Как мне использовать повторное использование вышеуказанных функций в разных сценариях? Если бы я хотел, например, создать фигуру с гистограммой с сюжетом чего-то C, я бы как-то позвонил FunctionA и FunctionC из моего script. Или, если бы мне нужна фигура с двумя графиками, я бы назвал FunctionC и FunctionD.
Я не уверен, что я объясняю себя четко, но другой способ задать этот вопрос: как передать объект фигуры функции, а затем заставить функцию нарисовать что-то для прошедшего объекта фигуры, а затем верните его обратно в основной script, чтобы добавить другие вещи, такие как название или что-то еще?
Ответы
Ответ 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