我正在尝试使用标签来绘制数组中的多个函数。
所以我从这里找到了一些帮助:https://stackoverflow.com/a/11493343/4055341并尝试修改代码,如下所示。但是我得到了一个错误。我得到的错误是ValueError,但我怎样才能使它们具有相同的大小?
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 10, 100)
y = [[5*x], [1*x], [2*x]]
labels = ['foo', 'bar', 'baz']
for y_arr, label in zip(y, labels):
plt.plot(x, y_arr, label=label)
plt.legend()
plt.show()
答案 0 :(得分:1)
y = [[5*x], [1*x], [2*x]]
替换y = [5*x, 1*x, 2*x]
应足以解决您的问题。
<强>推理:强>
当您执行x = np.linspace(0, 10, 100)
时,x
成为类似于x = [0, 0.1010, 0.2020, 0.3030, ..., 9.7979, 9.8989, 10]
的Numpy数组。将x
乘以标量会生成具有相同大小的新Numpy数组,例如5*x = [0, 0.505, 1.01, 1.515, ..., 48.989, 49.494, 50]
。因此,y = [5*x, 1*x, 2*x]
将是一个列表,其中每个元素都是正确的Numpy数组。
在视觉上,它是这样的:
y = [
[0, 0.1010, 0.2020, 0.3030, 9.7979, 9.8989, 10],
[0, 0.505, 1.01, 1.515, 48.9895, 49.4945, 50],
[0, 0.202, 0.404, 0.606, 19.5958, 19.7978, 20]
]
另一方面,y = [[5*x], [1*x], [2*x]]
是一个包含3个列表的列表,每个列表只包含一个对象:乘法产生的Numpy数组。这是结果:
y = [
[
[0, 0.1010, 0.2020, 0.3030, 9.7979, 9.8989, 10]
],
[
[0, 0.505, 1.01, 1.515, 48.9895, 49.4945, 50]
],
[
[0, 0.202, 0.404, 0.606, 19.5958, 19.7978, 20]
]
]
这就是为什么plot
会中断的原因:只要x
,它就会期待一个数组,而是将y_arr
分配给[[0, 0.1010, 0.2020, 0.3030, 9.7979, 9.8989, 10]]
,例如:a只包含一个对象的列表(恰好是Numpy数组)。