使用matplotlib的Python - 重用绘图函数

12 投票
2 回答
4584 浏览
提问于 2025-04-15 14:16

我有一个跟这个问题相关的后续问题。

我想知道是否可以通过多个 Python 脚本来简化图形的生成,每个脚本处理图形的不同部分?

比如说,我有以下几个函数:

FunctionA: 画一个直方图
FunctionB: 画一个带文字的框
FunctionC: 画一个 C 的图
FunctionD: 画一个 D 的图

我该如何在不同的脚本中重用这些函数呢?比如说,如果我想创建一个包含直方图和 C 的图的图形,我就需要在我的脚本中调用 FunctionA 和 FunctionC。或者,如果我想要一个包含两个图的图形,我就会调用 FunctionC 和 FunctionD。

我不确定我是否表达得很清楚,但换个说法就是:我该如何把一个图形对象传给一个函数,然后让这个函数在传入的图形对象上画东西,最后再把它返回给主脚本,以便添加其他内容,比如标题之类的?

2 个回答

0

好的,我已经搞明白怎么做了。这比我想象的简单多了。只需要稍微看一下这里的内容,了解一下figureaxes这两个类。

在你的主脚本中:

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

alt text

撰写回答