参见英文答案 >
Omit joining lines in matplotlib plot e.g. y = tan(x) 3
有没有一个简单的方法来绘制一个在正面和负面无穷无尽的功能,作为一个单一的情节,没有阴谋加入正面和负面的两端?
例如,使用此代码绘制y = 1 / x可得出结果图:
import numpy as np
import matplotlib.pyplot as plt
def f(x):
return 1/x
fx_name = r'$f(x)=\frac{1}{x}$'
x=np.setdiff1d(np.linspace(-10,10,100),[0]) #to remove the zero
y=f(x)
plt.plot(x, y, label=fx_name)
plt.legend(loc='upper left')
plt.show()
但是我想通过绘制两个不同的域来实现这个输出:
import numpy as np
import matplotlib.pyplot as plt
def f(x):
return 1/x
fx_name = r'$f(x)=\frac{1}{x}$'
xfn=np.setdiff1d(np.linspace(-10,0,100),[0])
xfp=np.setdiff1d(np.linspace(0,10,100),[0])
yfn=f(xfn)
yfp=f(xfp)
yf = plt.plot(xfn, yfn, label=fx_name)
plt.plot(xfp, yfp, color=yf[0].get_color())
plt.legend(loc='upper left')
plt.show()
有短切吗?
非常感谢.
解
在域数组中包含零,并且除以零.这将强制返回的共域数组的一个元素为“inf”,并且不绘制“inf”.
import numpy as np
import matplotlib.pyplot as plt
def f(x):
with np.errstate(divide='ignore', invalid='ignore'):
return 1/x
fx_name = r'$f(x)=\frac{1}{x}$'
x=np.linspace(-10,10,101)
y=f(x)
plt.plot(x, y, label=fx_name)
plt.legend(loc='upper left')
plt.show()
我喜欢这种方法,因为它避免了对阵列的手动操纵,并且可以容易地重用于共享相同域的其他函数(例如y = 1 /(x 2)).谢谢大家的贡献.