[英]python matplotlib for loop plot with function and labels
我试图从带有标签的数组中绘制多个函数。
所以我从这里找到了一些帮助: 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()
将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]]
:一个只有一个对象的列表(其中碰巧是一个Numpy数组)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.