Yep, x is iterable, as are the other arguments-- but that's not actually what the problem is. In this case the error message is a little deceptive, as it's actually what's inside y which is causing trouble. Let's look at the types involved:

And you see that the components of y aren't Python floats ('float') or numpy floats ('float64') [the difference between these two doesn't matter here] but Sage symbolic expressions, which (once again) matplotlib doesn't know what to do with.

There are many ways around this problem: simply cast the array to floats, use "np.e", float(e), or (if you don't care about "symbolic" e) simply replace e, etc. The Sage plot functions automatically coerce to numerical values, as they should, but the matplotlib functions (possibly for speed reasons) don't do such a coercion.