设置matplotlib图形/轴属性的首选方法

时间:2012-11-15 14:14:53

标签: python matplotlib idioms

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

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 个答案:

答案 0 :(得分:14)

Pyplot tutorial似乎推荐了ax.set_xxx()个功能,但也提到.setp(xxx=)

另一方面,.set(xxx=)函数未被使用,.setp(xxx=)虽然有文档证明,但未在任何示例中使用Pyplot API)。

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

我得出结论,matplotlib 推荐 api是.set_xxx()

通过gallery快速检查确认了这一点。

关于绘制函数的关键字参数存在类似的二元性,除了命令式API不那么明显。

答案 1 :(得分:5)

作为这个问题的超级后续跟进:

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

答案 2 :(得分:2)

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

  

matplotlib支持使用setp()(“set property”)和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

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

我的2美分。

答案 3 :(得分:0)

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

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

解决了我的问题。希望这会有所帮助。