Python 如何避免通过不连续(垂直渐近线)绘制线?
我有一个ctg(x)的代码,但是我不想要渐近线,或者我想要它们有不同的颜色。我是一个初学者,我不知道我可以在这段代码中更改什么: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,
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您应该避免包含极值。您可以通过包含一个小ε来实现。请参见编辑。