0

I am trying to plot multiple functions from a array, with labels.

So I found some help from here: https://stackoverflow.com/a/11493343/4055341 and tried to modify the code as it can be seen below. But I get an error with this. SO the error I get is ValueError, but how can I make them the same size?

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()
1
  • 2
    Or remove the square brackets around the multiplication of x in the y definition Commented Oct 30, 2017 at 12:44

1 Answer 1

1

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).

Sign up to request clarification or add additional context in comments.

1 Comment

Thank you for the visualisation :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.