当我在Python3中执行以下命令时,它会生成一个图表:
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 和 y 必须具有相同的第一维
。
仔细想一想,希望在两个生成器上绘制图形是很有意义的。只需逐点绘制即可。这在matplotlib
中是否可行?
我知道有一个类似的帖子,但不幸的是没有答案。
plt.plot(range(5), (i for i in (1,2,3,4,5)))
会以同样的方式失败,你不能将生成器传递给plot。 - Padraic Cunninghamrange
,而是因为生成器表达式。 - BrenBarn