Replacing y = [[5*x], [1*x], [2*x]] by y = [5*x, 1*x, 2*x] should be enough to solve your problem.
Reasoning:
When you did x = np.linspace(0, 10, 100), x became a Numpy array similar to x = [0, 0.1010, 0.2020, 0.3030, ..., 9.7979, 9.8989, 10]. Multiplying x by a scalar generates a new Numpy array with the same size, such as 5*x = [0, 0.505, 1.01, 1.515, ..., 48.989, 49.494, 50]. Hence, y = [5*x, 1*x, 2*x] will be a list with each element being a proper Numpy array.
Visually, it is like this:
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]
]
On the other hand, y = [[5*x], [1*x], [2*x]] is a list containing 3 lists, each containing only a single object: the Numpy array resulting from the multiplication. This is the result:
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]
]
]
That's why plot breaks: it was expecting an array as long as x but, instead, y_arr is assigned to [[0, 0.1010, 0.2020, 0.3030, 9.7979, 9.8989, 10]] for instance: a list with only one object (which happens to be a Numpy array).