12

我对这个问题有一个后续问题。

是否可以通过在图形的不同部分上工作的多个 python 脚本来简化图形的生成?

例如,如果我有以下功能:

函数A:绘制某事物的直方图
函数B:绘制一个包含文本的框
函数C:绘制某事物C的图
函数D:绘制某事物D的图

如何在不同的脚本中重用上述功能?例如,如果我想创建一个带有直方图和 C 的图的图形,我会以某种方式从我的脚本中调用 FunctionA 和 FunctionC。或者,如果我想要一个包含两个图的图形,我会调用 FunctionC 和 FunctionD。

我不确定我是否清楚地解释自己,但提出这个问题的另一种方式是:如何将图形对象传递给函数,然后让函数向传递的图形对象绘制一些东西,然后将其返回到主脚本添加其他内容,如标题或其他内容?

4

2 回答 2

8

在这里,您要使用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()

替代文字

于 2009-09-12T00:54:29.710 回答
0

好的,我已经想出了如何做到这一点。这比我想象的要简单得多。它只需要在这里阅读一下图形轴类

在您的主脚本中:

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 中添加更多函数并从任何脚本调用它们,只要它们包含在import调用中即可。:D

于 2009-09-12T00:34:45.543 回答