Рисуется не асимптот, а линия для точек вокруг нуля. Чтобы преодолеть это, вы должны создать два графика для положительной и отрицательной частей по отдельности, убедившись, что цвет (стиль?) Для двух графиков одинаков (и при желании получить первый цвет по умолчанию для 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()