Python和科学计算认证群组  - 讨论区

标题:还是问个函数属性列表的问题

2011年06月21日 星期二 07:27

举例

enthought.chaco.api的 Plot 对象的plot函数

其参数列表在源代码中定义:

def plot(self, data, type="line", name=None, index_scale="linear",

value_scale="linear", origin=None, **styles):

 

我想问的问题是 在实际使用中 类似 color,marker, marker_trait 这样的属性 从哪里能看到?

 

也就是说如何查阅完整的函数参数列表呢?

2011年06月21日 星期二 09:11

由于plot函数中有一个**styles参数,因此styles是一个保存所有其它参数的字典。

你只需要看在plot中如何对styles这个字典进行处理就知道plot能接收什么参数了。

 

例如:

 

我们看到:

 

if styles.get("color") == "auto":

    self._auto_color_idx = \

        (self._auto_color_idx + 1) % len(self.auto_colors)

    styles["color"] = self.auto_colors[self._auto_color_idx]

 

这段代码将color="auto"修改成具体的参数,因此你知道plot可以接收color参数,

并且参数值可以是"auto"。

 

最后我们看到:

 

plot = cls(index=index,

           value=value,

           index_mapper=imap,

           value_mapper=vmap,

           orientation=self.orientation,

           origin = origin,

           **styles)

 

因此styles这些参数实际上是传递给了真正创建图形的类。

 

例如如果plot(type="line",...),那么将用LinePlot创建曲线。

因此你需要看LinePlot都支持哪些参数:

 

由于LinePlot从HasTraits继承,因此styles中的参数可以用来

直接设置LinePlot及其父类中定义的所有Trait属性。

例如我在LinePlot的定义中找到了:

 

line_width = Float(1.0)

line_style = LineStyle

 

因此可以在调用plot(type="line", ...)时设置这两个参数。

2011年06月21日 星期二 09:22

恩 懂了

不过还是要请张若愚同学解释一下 marker 还有marker_trait 的参数从哪儿来

我在LinePlot里也没有知道。

其实我想问的问题最主要是 您是如何找想要的参数列表的?请您介绍一下您是如何找的?我发现类似于plot这样的函数 为什么不在**style里写全 所有可用的参数呢? 这个帮助和matlab的比 似乎差不少呢

 

 

 

2011年06月21日 星期二 11:41

可以这样理解:Plot类是对一系列绘图类的封装,在plot.py中可以找到:

 

renderer_map = Dict(dict(line = LinePlot,

                         scatter = ScatterPlot, 

                         polygon = PolygonPlot,

                         cmap_scatter = ColormappedScatterPlot,

                         img_plot = ImagePlot,

                         cmap_img_plot = CMapImagePlot,

                         contour_line_plot = ContourLinePlot,

                         contour_poly_plot = ContourPolyPlot,

                         candle = CandlePlot))

 

根据plot()的type参数会使用其中不同的类创建图形。

 

可以用Spyder的跳转功能找到定义的位置。

 

例如打开plot.py,按住ctrl按键,然后点ScatterPlot,就跳到ScatterPlot的

定义处,在其中可以看到:

 

    marker = MarkerTrait

 

    # The pixel size of the marker, not including the thickness of the outline.

    marker_size = Float(4.0)

 

按ctrl按键点MarkerTrait,跳到MarkerTrait的定义处:

 

MarkerTrait = Trait("square", MarkerNameDict,

                     editor=EnumEditor(values=marker_names))

 

marker_trait = MarkerTrait

2011年06月21日 星期二 13:36

谢谢 版主的耐心解答!

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号