Python与matplotlib - 重用绘图功能

时间:2009-09-11 23:15:10

标签: python matplotlib

我对此question提出了跟进问题。

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

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

  

功能A:绘制某事物的直方图   FunctionB:画一个带有文字的方框   FunctionC:绘制一些事物C的情节   功能D:绘制D的图表

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

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

2 个答案:

答案 0 :(得分:8)

在这里,您要使用Artist objects,并根据需要将它们传递给函数:

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

答案 1 :(得分:0)

哦,我已经弄清楚如何做到这一点。它比我想象的要简单得多。只需要对herefigure类进行一些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