Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何避免通过不连续(垂直渐近线)绘制线?_Python_Numpy_Matplotlib - Fatal编程技术网

Python 如何避免通过不连续(垂直渐近线)绘制线?

Python 如何避免通过不连续(垂直渐近线)绘制线?,python,numpy,matplotlib,Python,Numpy,Matplotlib,我有一个ctg(x)的代码,但是我不想要渐近线,或者我想要它们有不同的颜色。我是一个初学者,我不知道我可以在这段代码中更改什么: import matplotlib.ticker as tck import matplotlib.pyplot as plt import numpy as np f,ax=plt.subplots(figsize=(8,5)) x=np.linspace(-np.pi, np.pi,100) y=np.cos(x)/np.sin(x) plt.ylim([-4,

我有一个ctg(x)的代码,但是我不想要渐近线,或者我想要它们有不同的颜色。我是一个初学者,我不知道我可以在这段代码中更改什么:

import matplotlib.ticker as tck
import matplotlib.pyplot as plt
import numpy as np
f,ax=plt.subplots(figsize=(8,5))
x=np.linspace(-np.pi, np.pi,100)
y=np.cos(x)/np.sin(x)
plt.ylim([-4, 4])
ax.plot(x/np.pi,y)
plt.title("f(x) = ctg(x)")
plt.xlabel("x")
plt.ylabel("y")
ax.xaxis.set_major_formatter(tck.FormatStrFormatter('%g $\pi$'))
plt.savefig('ctg')
plt.show()

它不是一条正在绘制的渐近线,而是零附近点的线。 要解决此问题,应分别为正部件和负部件创建两个绘图,确保两个绘图的颜色(样式?)相同(并且可以选择获取第一个默认matplotlib颜色)。 由于
np.linspace()。
为了克服这个问题,只需在极值上加/减一个小数字(
epsilon

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
f,ax=plt.subplots(figsize=(8,5))

# get first default color
color = plt.rcParams['axes.prop_cycle'].by_key()['color'][0]

epsilon = 1e-7
intervals = (
    (-np.pi, 0),
    (0, np.pi), )
for a, b in intervals:
    x=np.linspace(a + epsilon, b - epsilon, 50)
    y=np.cos(x) / np.sin(x)
    ax.plot(x/np.pi,y, color=color)

plt.title("f(x) = ctg(x)")
plt.xlabel("x")
plt.ylabel("y")
plt.ylim([-4, 4])
ax.xaxis.set_major_formatter(mpl.ticker.FormatStrFormatter('%g $\pi$'))
plt.savefig('ctg')
plt.show()

它不是一条正在绘制的渐近线,而是零附近点的线。 要解决此问题,应分别为正部件和负部件创建两个绘图,确保两个绘图的颜色(样式?)相同(并且可以选择获取第一个默认matplotlib颜色)。 由于
np.linspace()。
为了克服这个问题,只需在极值上加/减一个小数字(
epsilon

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
f,ax=plt.subplots(figsize=(8,5))

# get first default color
color = plt.rcParams['axes.prop_cycle'].by_key()['color'][0]

epsilon = 1e-7
intervals = (
    (-np.pi, 0),
    (0, np.pi), )
for a, b in intervals:
    x=np.linspace(a + epsilon, b - epsilon, 50)
    y=np.cos(x) / np.sin(x)
    ax.plot(x/np.pi,y, color=color)

plt.title("f(x) = ctg(x)")
plt.xlabel("x")
plt.ylabel("y")
plt.ylim([-4, 4])
ax.xaxis.set_major_formatter(mpl.ticker.FormatStrFormatter('%g $\pi$'))
plt.savefig('ctg')
plt.show()

此代码为余切函数创建一个图形和一个子图。当sin(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 = 1/np.tan(x)
y[np.abs(np.sin(x)) <= np.abs(np.sin(x[1]-x[0]))] = np.nan
# This operation inserts a NaN where sin(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='Cotangent')
# 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
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=1/np.tan(x)
y[np.abs(np.sin(x))此代码为余切函数创建一个图形和一个子图。当sin(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 = 1/np.tan(x)
y[np.abs(np.sin(x)) <= np.abs(np.sin(x[1]-x[0]))] = np.nan
# This operation inserts a NaN where sin(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='Cotangent')
# 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
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=1/np.tan(x)

y[np.abs(np.sin(x))我建议您发布当前绘图结果(图像)和预期绘图(使用其他工具绘制)我建议您发布当前绘图结果(图像)和预期绘图(使用其他工具绘制)谢谢!我尝试绘制tg(x),但当我更改正、负部分时,它不起作用:
x=np.linspace(-np.pi-(1/2)*np.pi,50)y=np.sin(x)/np.cos(x)ax.plot(x/np.pi,y,color=color)x=np.linspace(-1/2)*np.pi,(1/2)*np.pi,(1/2)*np np np.pi,(1/2)*np np np.pi,(1/2)*np np.pi,50)y=np.sin(x)/np.cos(x)ax.plot(x/np.color=x)plot(x)/np
位于不同的位置。您需要在要绘制的函数的不连续处分开绘制。在
cot(x)的情况下,
位于
x==0
但可以在任何地方。在使用
np.linspace()定义
x
时,您可能需要使用
endpoint=False
。当tg(x)有渐近线时,我会改变范围,但它仍然不起作用:/@wvnikax你应该避免包含极值。你可以通过包含一个小ε来实现。请参见编辑。谢谢!我尝试绘制tg(x),但当我改变正和负部分时,它不起作用:
x=np.linspace(-np.pi,-(1/2)*np.pi,50)y=np.sin(x)/np.cos(x)ax.plot(x/np.pi,y,color=color)x=np.linspace(-1/2)*np.pi,(1/2)*np.pi,50)y=np.sin(x)/np.cos(x)ax.plot(x/np.pi,y,color=color)x=np.linspace((1/2)*np.pi,np.pi,50)y=np.sin(x)/np.cos(x)ax.plot(x)/np.cos(x)ax.plot(x)/code>这是因为
tan(x)的渐近线
位于不同的位置。您需要在要绘制的函数的不连续处分开绘制。在
cot(x)的情况下,
位于
x==0
但可以在任何地方。在使用
np.linspace()定义
x
时,您可能需要使用
endpoint=False
。当tg(x)有渐近线时,我会改变范围,但它仍然不起作用:/@wvnikax您应该避免包含极值。您可以通过包含一个小ε来实现。请参见编辑。