如何将 y=1/x 绘制为单个图[重复]

2024-01-02

有没有一种简单的方法可以将正负趋于无穷大的函数绘制为单个图,而无需将正负两端连接起来?

例如,使用此代码绘制 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()

有捷径吗? 非常感谢。

Solution

在域数组中包含零,并禁止除以零。这会强制返回的共域数组的一个元素为“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))。感谢大家的贡献。


实际上你想包括x = 0因为这会导致y = nan,在情节中形成间隙。

import numpy as np
import matplotlib.pyplot as plt

def f(x):
    return 1/x
fx_name = r'$f(x)=\frac{1}{x}$'

# using 101 steps results in in array including the value 0
x=np.linspace(-10,10,101)
# f(0) = nan -> a nan value creates a gap
y=f(x)
plt.plot(x, y, label=fx_name)
plt.legend(loc='upper left')
plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 y=1/x 绘制为单个图[重复] 的相关文章

随机推荐