【问题标题】:passing x- and y-data as keyword arguments in matplotlib?在 matplotlib 中将 x 和 y 数据作为关键字参数传递?
【发布时间】:2012-01-23 22:02:44
【问题描述】:

或者,为什么不呢

import numpy
import matplotlib.pyplot as plt
plt.plot(xdata = numpy.array([1]), ydata = numpy.array(1), color = 'red', marker = 'o')

工作?参考文献

> 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>]

【问题讨论】:

  • 你试过plt.plot(xdata = [1], ydata = [1], color = 'red', marker = 'o')吗?这与您的第一个工作示例相匹配。

标签: python plot ipython matplotlib


【解决方案1】:

只是为了扩展@Yann 已经说过的话:

要了解为什么会发生这种情况,您需要更多地了解 matplotlib 的结构。为了允许像plt.setp 这样的“matlab-isms”,并保持与旧版本的 python 的兼容性,matplotlib 避免使用属性并严重依赖 getter 和 setter。 (plot 实际上是最复杂的情​​况之一,仅仅是因为所有疯狂的调用形式都支持它。)

你可以很好地论证这是一个过时的、非 Python 的设计,但这不是重点。

调用plot 时实际发生的情况(对于plot(x, y, other=stuff) 的最简单情况)是从前两个参数创建一个新的matplotlib.line.Line2D 对象,然后调用matplotlib.line.Line2D.update(kwargs)

update 基本上可以:

for key, value in kwargs.iteritems():
    func = getattr(self, 'set_'+key)
    func(value)

我过于简单化了,但这是基本思想。

此外,接受的关键字参数列表基本上是从具有set_* 的任何内容自动生成的。因为Line2Dset_xdataset_ydata 方法,所以它们会出现在关键字参数列表中。

关键是,直到Line2D 的大部分初始化之后,才真正使用关键字参数,如果您不指定任何参数,plot 将不会初始化任何Line2D

您可以认为这是一个错误,但我怀疑它会被修复。我不认为xdataydata 曾经打算用作关键字参数。

set_xdataset_ydata 可以让您快速更新Line2D 实例,而不是创建一个新实例(用于动画等...)。由于 matplotlib 的设置方式,它们恰好被允许作为关键字参数。

【讨论】:

  • 非常有帮助的解释。非常感谢。
【解决方案2】:

为什么?谁知道,但除非您定义 xy 参数,否则似乎不会创建一行。 xdataydata 仅在创建时才更改行的数据,并且似乎没有参数就不是创建的。试试这个:

plt.plot([0],[0],xdata = [1,2,3,4], #numpy.array([3,4]),
               ydata = [4,5,6,7], #numpy.array([3,4]), 
               color = 'red', 
               marker = 'o')

它按我想的那样工作。

【讨论】:

    猜你喜欢
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 2010-09-24
    • 1970-01-01
    • 2017-08-01
    相关资源
    最近更新 更多