1

我正在尝试做的事情可以这样写:

import pylab
class GetsDrawn(object):
    def __init__(self):
        self.x=some_function_that_returns_an_array()
        self.y=some_other_function_that_returns_an_array()

    # verison 1: pass in figure/subplot arguments
    def draw(self, fig_num, subplot_args ):
        pylab.figure(fig_num)
        pylab.subplot( *subplot_args )
        pylab.scatter( self.x, self.y)

即我可以通过图形编号和子图配置告诉对象“在哪里”绘制自己。

我怀疑从长远来看,传递 pylab 对象的版本会更加灵活,但不知道要为函数提供什么类型的对象。

4

2 回答 2

1

我会初始化__init__. 将它们保存在列表中,例如self.ax. 然后在该draw方法中,您可以将绘图命令直接发送到所需的轴对象:

import matplotlib.pyplot as plt

class GetsDrawn(object):
    def __init__(self):
        self.x=some_function_that_returns_an_array()
        self.y=some_other_function_that_returns_an_array()
        self.ax = []
        for i in range(num_figures):
            fig = plt.figure(i)
            self.ax.append(plt.subplot(1, 1, 1))

    # verison 1: pass in figure/subplot arguments
    def draw(self, fig_num, subplot_args ):
        ax = self.ax[fig_num]
        ax.subplot( *subplot_args )
        ax.scatter( self.x, self.y)

顺便说一句,pylab对于交互式会话来说是可以的,但pyplot推荐用于脚本

于 2012-11-08T14:07:45.837 回答
1

对于脚本,通常首选使用面向对象的 api。

例如,您可以让您的函数接收一个数字:

def draw(fig, sub_plot_args,x,y):
    ax = fig.subplot(*sub_plot_args)
    ax.scatter(x,y)

如果您的函数实际上只在一个轴上绘制,您甚至可以将其作为对象传递:

def draw(ax,x,y):

    ax.scatter(x,y)

要创建图形,请使用:

import matplotlib.pyplot as plt
fig = plt.figure()

例如,要创建一个带有一个子图的图形,请使用:

fig, ax = plt.subplots()

如果我没记错的话,最后一个命令仅存在于最新版本中。

于 2012-11-15T14:23:09.927 回答