Dan Ciborowski - MSFT -4 years ago 234
Python Question

# Plot Piecewise Function in Python

I would like to plot the following piecewise function in Python using Matplotlib, from 0 to 5.

`f(x) = 1, x != 2; f(x) = 0, x = 2`

In Python...

``````def f(x):
if(x == 2): return 0
else: return 1
``````

Using NumPy I create an array

``````x = np.arange(0., 5., 0.2)

array([ 0. ,  0.2,  0.4,  0.6,  0.8,  1. ,  1.2,  1.4,  1.6,  1.8,  2. ,
2.2,  2.4,  2.6,  2.8,  3. ,  3.2,  3.4,  3.6,  3.8,  4. ,  4.2,
4.4,  4.6,  4.8])
``````

I have tried things like...

``````import matplotlib.pyplot as plt
plt.plot(x,f(x))
``````

Or...

``````vecfunc = np.vectorize(f)
result = vecfunc(t)
``````

Or...

``````def piecewise(x):
if x == 2: return 0
else: return 1

import matplotlib.pyplot as plt
x = np.arange(0., 5., 0.2)
plt.plot(x, map(piecewise, x))

ValueError: x and y must have same first dimension
``````

But I am not using these functions correctly, and am now just randomly guessing how to do this.

Some answers are starting to get there... But the points are being connected into a line on the plot. How do we just plot the points?

The problem is that the function `f` does not take an array as input but a single numer. You can:
``````plt.plot(x, map(f, x))
The `map` function takes a function `f`, an array `x` and returns another array where the function `f` is applied to each element of the array.