【发布时间】:2015-12-17 12:15:32
【问题描述】:
当我这样做时它会绘图(在 Python 3 中):
import matplotlib.pyplot as plt
a = [1,2,3,4,5]
plt.plot(range(5), a)
plt.show()
据我所知,在 Python 3 中,range() 返回一个迭代器,因此我上面的代码几乎是在迭代器上绘制的。现在我的问题是,为什么我不能这样做:
def myGen(iterable):
for i in iterable:
yield i
a = myGen([1,2,3,4,5])
plt.plot(range(5),a)
plt.show()
当我尝试这个时,我得到ValueError: x and y must have same first dimension
当您考虑它时,想要绘制两个生成器是有道理的。只是一个接一个的情节。这在matplotlib 中可行吗?
我知道there is a similar thread,很遗憾没有得到答复。
【问题讨论】:
-
range 不是迭代器,它是一个 不可变序列 ,
plt.plot(range(5), (i for i in (1,2,3,4,5)))会以同样的方式失败,您不能将生成器传递给 plot -
@PadraicCunningham:这与它无关。它不会因为
range而失败,而是因为生成器表达式。 -
@BrenBarn,这正是我刚才所说的。
-
@PadraicCunningham:但这正是他要问的:为什么他不能通过生成器来绘图?
-
@BrenBarn,没有人问为什么 range 有效但生成器失败,OP 认为它们具有可比性,但它们不是
标签: python matplotlib plot iterator generator