30

假设我有一个名为 的 matplotlib 轴ax,我想设置它的几个属性。目前,我这样做:

ax.set_yscale('log')
ax.set_xlim([0,10])
ax.set_xlabel('some label')

但一段时间后它会变得乏味。然后我遇到了这个方法:

ax.set(yscale='log', xlim=[0,10], xlabel='some label')

更简洁,但似乎有点无证。我的意思是所有文档都说“一个 tkstyle set 命令,通过kwargs来设置属性”。

首选或惯用的方式是什么?set方法api稳定吗?

4

4 回答 4

18

Pyplot 教程似乎推荐ax.set_xxx()函数,但也提到.setp(xxx=).

另一方面,.set(xxx=)没有使用函数.setp(xxx=),并且虽然有文档记录,但在任何示例中都没有使用(Pyplot API)。

我理解 matplotlib 支持命令式编程风格和类似 matlab 的风格。原因是目标用户群——那些已经熟悉 Python 和以前使用过 Matlab 的人。

我的结论是 matplotlib推荐的 api 是.set_xxx().

通过画廊的快速检查证实了这一点。

编辑:现在画廊里似乎都有这两个例子。

绘图函数的关键字参数也存在类似的对偶性,只是命令式 API 并不那么明显。

于 2012-12-03T13:01:38.077 回答
9

作为对这个问题的超迟跟进:

ax.set_xlim(4)ax.set(xlim=4)最终是同一件事,所以做你喜欢的事。ax.set(kwarg=foo)通过一些字符串操作调用ax.set_kwarg(foo),如果你查看源代码就可以看到。各种 setter 函数也大多是单行函数,但存在是为了允许内省setp工作。

于 2014-12-05T07:08:18.763 回答
3

我通常使用 matplotlib 的 pyplot(交互式)接口,它公开了 setp函数(我经常使用)。

matplotlib 支持使用 setp()(“设置属性”)和 getp() 来设置和获取对象属性,以及对对象进行自省。

这让您可以像set上面的函数一样执行操作,只需将要设置的对象作为参数传递:

>>> x = arange(0,1.0,0.01)
>>> y1 = sin(2*pi*x)
>>> y2 = sin(4*pi*x)
>>> lines = plot(x, y1, x, y2)
>>> setp(lines, linewidth=2, color='r')

我猜该setp函数实际上调用了传递对象的set函数,该函数用于定位和设置kwargs

所以我的想法是,尽管缺乏文档,但对象的方法是通过kwargs而不是逐行set设置多个参数的惯用方法。

我的 2 美分。

于 2012-11-15T23:38:03.837 回答
0

我在 matplotlib 后端有类似的问题,所以我刚刚看到这篇文章。我希望 matplotlib 允许对绘图中的属性使用字典控件。使用@Chris Zeh 的建议,您可以:

f = {'xlabel': 'x1', 'ylabel': 'x2'}
[setp(ax, formati, formatj) for formati, formatj in f.items()]

这解决了我的问题。希望这可以帮助。

于 2017-06-03T10:16:32.883 回答