Python 在matplotlib中绘制tan

Python 在matplotlib中绘制tan,python,graph,matplotlib,Python,Graph,Matplotlib,我有以下代码: from mpl_toolkits.axes_grid.axislines import SubplotZero from matplotlib.transforms import BlendedGenericTransform import matplotlib.pyplot as plt import numpy if 1: fig = plt.figure(1) ax = SubplotZero(fig, 111) fig.add_subplot(

我有以下代码:

from mpl_toolkits.axes_grid.axislines import SubplotZero
from matplotlib.transforms import BlendedGenericTransform
import matplotlib.pyplot as plt
import numpy

if 1:
    fig = plt.figure(1)
    ax = SubplotZero(fig, 111)
    fig.add_subplot(ax)

    ax.axhline(linewidth=1.7, color="black")
    ax.axvline(linewidth=1.7, color="black")

    plt.xticks([1])
    plt.yticks([])

    ax.text(0, 1.05, 'y', transform=BlendedGenericTransform(ax.transData, ax.transAxes), ha='center')
    ax.text(1.05, 0, 'x', transform=BlendedGenericTransform(ax.transAxes, ax.transData), va='center')

    for direction in ["xzero", "yzero"]:
        ax.axis[direction].set_axisline_style("-|>")
        ax.axis[direction].set_visible(True)

    for direction in ["left", "right", "bottom", "top"]:
        ax.axis[direction].set_visible(False)

    x = numpy.linspace(-1, 1, 10000)
    ax.plot(x, numpy.tan(2*(x - numpy.pi/2)), linewidth=1.2, color="black")

    plt.ylim(-5, 5)
    plt.savefig('graph.png')
这将生成以下图形:

正如您所看到的,不仅绘制了tan图,还添加了一部分直线以连接tan图的渐近区域,渐近线通常位于该区域


是否有一些内置的方法可以跳过该部分?或者我会画出以渐近线为界的tan的独立不相交区域(如果你明白我的意思的话)?

你可以尝试的东西:设置一个有限阈值并修改你的函数以在这些点之后提供非有限值。实际代码修改:

yy = numpy.tan(2*(x - numpy.pi/2))
threshold = 10000
yy[yy>threshold] = numpy.inf
yy[yy<-threshold] = numpy.inf
ax.plot(x, yy, linewidth=1.2, color="black")
yy=numpy.tan(2*(x-numpy.pi/2))
阈值=10000
yy[yy>阈值]=numpy.inf
yy[yy此代码为切线函数创建一个图形和一个子图。当cos(x)趋向于0时,插入NaN(NaN表示“不是一个数字”,并且NaN未绘制或连接)。
由k-donn()创建的matplot fmt pi用于更改格式化程序,使x标签和记号对应于分数格式中π/8的倍数。
打印格式(网格、图例、限制、轴)按注释执行

import matplotlib.pyplot as plt
import numpy as np
from matplot_fmt_pi import MultiplePi

fig, ax = plt.subplots()        # creates a figure and one subplot
x = np.linspace(-2 * np.pi, 2 * np.pi, 1000)
y = np.tan(x)
y[np.abs(np.cos(x)) <= np.abs(np.sin(x[1]-x[0]))] = np.nan
# This operation inserts a NaN where cos(x) is reaching 0
# NaN means "Not a Number" and NaNs are not plotted or connected
ax.plot(x, y, lw=2, color="blue", label='Tangent')
# Set up grid, legend, and limits
ax.grid(True)
ax.axhline(0, color='black', lw=.75)
ax.axvline(0, color='black', lw=.75)
ax.set_title("Trigonometric Functions")
ax.legend(frameon=False)    # remove frame legend frame
# axis formatting
ax.set_xlim(-2 * np.pi, 2 * np.pi)
pi_manager = MultiplePi(8)          # number= ticks between 0 - pi
ax.xaxis.set_major_locator(pi_manager.locator())
ax.xaxis.set_major_formatter(pi_manager.formatter())
plt.ylim(top=10)  # y axis limit values
plt.ylim(bottom=-10)
y_ticks = np.arange(-10, 10, 1)
plt.yticks(y_ticks)
fig
[![enter image description here][1]][1]plt.show()
导入matplotlib.pyplot作为plt
将numpy作为np导入
从matplot\u fmt\u pi导入MultiplePi
fig,ax=plt.subplot()#创建一个图形和一个子图
x=np.linspace(-2*np.pi,2*np.pi,1000)
y=np.tan(x)

y[np.abs(np.cos(x))只是为了清楚起见:您想去掉连接
-∞
值?@jsalonen你是指垂直线吗?如果是的话,是的。由于某种原因,我没有得到你在我的代码中添加解决方案时得到的输出。你还想做“yy[yy]操作符是
不是,我的意思是-看看你的第4行;你用“哈哈,傻我……显然你在做”<-threshold”,这里我想numpy在某种程度上为Python语言添加了一个新的运算符。顺便说一句,降低阈值非常有效。感谢您的帮助!我使用了两个运算符: