Matplotlib + PyScript

Hey folks, so far i have seen two ways of getting a matplotlib plot to show via PyScript:

  • Call matplotlib.pyplot.figure() and store the instance in fig
  • Do the plotting via plot() calls
  • then type fig

The other way i have seen working is:

import matplotlib.pyplot as plt
plt.plot(..)
plt

However, i haven’t been able to get the pylab module working i.e. to show the graph with something like this:

from pylab import plot, show
plot(..)
show()

Now, i am guessing anything that prints inside the Python program gets shown in the div. However, with matplotlib, i am not able to understand why the first two options work and the third doesn’t.

After I wrote this, I came across another behavior I don’t understand. Consider the following code:

def draw_graph(x, y):
    plt.plot(x, y)
    plt.show()

fig = plt.figure() 
try:
    u = float(input('Enter the initial velocity (m/s): '))
    theta = float(input('Enter the angle of projection (degrees): '))
except ValueError:
    print('You entered an invalid input')
else:
    # calculate x and y (omitted)
    draw_graph(x, y)
fig

The above shows the graph. However, when I write the try..except..else as follows, it doesn’t (I move the fig statements inside the else block):

try:
    u = float(input('Enter the initial velocity (m/s): '))
    theta = float(input('Enter the angle of projection (degrees): '))
except ValueError:
    print('You entered an invalid input')
else:
    fig = plt.figure()
    # calculate x and y (omitted)
    draw_graph(x, y)
    fig

Would appreciate any pointers, thank you.

I can’t try this yet but I came across it and will take a guess anyway - I would think the runtime will take the last expression evaluated and see whether there is something to show. Perhaps wrapping it in the try/except/else statement resets that “last evaluated expression”. Can you try fig.show()?