在Python中绘制分段函数

Dan*_*SFT 6 python numpy matplotlib python-3.x

我想使用Matplotlib在Python中从0到5绘制以下分段函数。

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

在Python中...

def f(x):
 if(x == 2): return 0
 else: return 1
Run Code Online (Sandbox Code Playgroud)

使用NumPy我创建一个数组

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])
Run Code Online (Sandbox Code Playgroud)

我尝试过类似...

import matplotlib.pyplot as plt
plt.plot(x,f(x))
Run Code Online (Sandbox Code Playgroud)

要么...

vecfunc = np.vectorize(f)
result = vecfunc(t)
Run Code Online (Sandbox Code Playgroud)

要么...

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
Run Code Online (Sandbox Code Playgroud)

但是我没有正确使用这些功能,现在只是随机猜测如何做到这一点。

一些答案开始到达那里。。。但是这些点被连接到情节上的一条线上。我们如何绘制点?

在此处输入图片说明

enr*_*cis 5

问题是该函数f不接受一个数组作为输入,而是一个数字。你可以:

plt.plot(x, map(f, x))
Run Code Online (Sandbox Code Playgroud)

map函数接受一个函数f,一个数组x并返回另一个数组,其中该函数f应用于数组的每个元素。


lit*_*nce 5

一些答案开始到达那里。。。但是这些点被连接到情节上的一条线上。我们如何绘制点?

import matplotlib.pyplot as plt
import numpy as np

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

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

y = []
for i in range(len(x)):
   y.append(f(x[i]))

print x
print y

plt.plot(x,y,c='red', ls='', ms=5, marker='.')
ax = plt.gca()
ax.set_ylim([-1, 2])

plt.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明