are*_*ick 5 python plot matplotlib ipython
或者,为什么不呢
import numpy
import matplotlib.pyplot as plt
plt.plot(xdata = numpy.array([1]), ydata = numpy.array(1), color = 'red', marker = 'o')
Run Code Online (Sandbox Code Playgroud)
工作?比照
> In [21]: import numpy
> In [22]: import matplotlib.pyplot as plt
> In [23]: plt.plot(xdata = numpy.array([1]), ydata = numpy.array(1), color = 'red', marker = 'o')
> Out[23]: []
> In [24]: plt.plot([1],[1], color = 'red', marker = 'o')
> Out[24]: [<matplotlib.lines.Line2D at 0x108036890>]
> In [25]: plt.plot(1, 1, color = 'red', marker = 'o')
> Out[25]: [<matplotlib.lines.Line2D at 0x1041024d0>]
Run Code Online (Sandbox Code Playgroud)
Joe*_*ton 12
只是为了扩展@Yann已经说过的内容:
要理解为什么会发生这种情况,您需要更多地了解matplotlib的结构.为了允许"matlab-isms" plt.setp,并保持与旧版python的兼容性,matplotlib避免了属性并且在很大程度上依赖于getter和setter.(plot实际上是最复杂的案例之一,仅仅是因为它支持的所有疯狂形式的调用.)
你可以提出一个很好的论据,即这是一种过时的,无声的设计,但这不是重点.
plot(x, y, other=stuff)当你调用时实际发生的事情(对于最简单的情况)是从前两个参数创建plot一个新matplotlib.line.Line2D对象,然后matplotlib.line.Line2D.update(kwargs)被调用.
update 基本上做了:
for key, value in kwargs.iteritems():
func = getattr(self, 'set_'+key)
func(value)
Run Code Online (Sandbox Code Playgroud)
我过度简化,但那是基本的想法.
此外,接受的关键字参数列表基本上是自动生成的set_*.因为Line2Dhas set_xdata和set_ydatamethods,它们出现在关键字参数列表中.
关键是,关键字参数在大多数初始化之后才会实际使用Line2D,如果没有指定任何参数,plot则不会初始化任何参数Line2D.
你可以认为这是一个错误,但我怀疑它会被修复.我不认为xdata并且ydata曾经打算用作关键字参数.
set_xdata并set_ydata允许您快速更新Line2D实例而不是创建新实例(对于动画等...).由于matplotlib的设置方式,它们恰好被允许作为关键字参数.
| 归档时间: |
|
| 查看次数: |
1305 次 |
| 最近记录: |