使用matplotlib的Python - 重用绘图函数
我有一个跟这个问题相关的后续问题。
我想知道是否可以通过多个 Python 脚本来简化图形的生成,每个脚本处理图形的不同部分?
比如说,我有以下几个函数:
FunctionA: 画一个直方图
FunctionB: 画一个带文字的框
FunctionC: 画一个 C 的图
FunctionD: 画一个 D 的图
我该如何在不同的脚本中重用这些函数呢?比如说,如果我想创建一个包含直方图和 C 的图的图形,我就需要在我的脚本中调用 FunctionA 和 FunctionC。或者,如果我想要一个包含两个图的图形,我就会调用 FunctionC 和 FunctionD。
我不确定我是否表达得很清楚,但换个说法就是:我该如何把一个图形对象传给一个函数,然后让这个函数在传入的图形对象上画东西,最后再把它返回给主脚本,以便添加其他内容,比如标题之类的?
2 个回答
0
好的,我已经搞明白怎么做了。这比我想象的简单多了。只需要稍微看一下这里的内容,了解一下figure和axes这两个类。
在你的主脚本中:
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
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()