Dan Ciborowski - MSFT -4 years ago 234

Python Question

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?

Recommended for you: Get network issues from **WhatsUp Gold**. **Not end users.**

Answer Source

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.

Recommended from our users: **Dynamic Network Monitoring from WhatsUp Gold from IPSwitch**. ** Free Download**

Latest added