Я считаю, что самый простой способ сделать это - просто отфильтровать нужные точки перед построением графика, вы можете сделать это с помощью
filteredx = list()
filteredy = list()
for ii in range(len(NT)):
if OT[ii] < (0.61) / (NT[ii] - 0.05) + 1.3: #Adjust equation as needed
filteredx.append(NT[ii])
filteredy.append(OT[ii])
plt.scatter(filteredx, filteredy)
Для полного примера:
import numpy as np
import matplotlib.pyplot as plt
# Create random data for demonstration
np.random.seed(1)
n = 200
datay = np.random.randn(n)*50
datax = np.random.randn(n)*1.5
x = np.linspace(-5, 5, 1000)
y = (0.61) / (x - 0.05) + 1.3
filteredx = list()
filteredy = list()
plt.scatter(datax, datay, marker='o', color='g', label="All Points")
for ii in range(n):
if datay[ii] < (0.61) / (datax[ii] - 0.05) + 1.3:
filteredx.append(datax[ii])
filteredy.append(datay[ii])
plt.scatter(filteredx, filteredy, marker='.', color='r', label="After Filtering")
plt.plot(x,y, linewidth=1, linestyle='-')
plt.legend()
plt.show()
Чтобы удалить асимптоту, вы можете отфильтровать значения, большие и меньшие x = 0.05
, и построить две группы отдельно, т.е.
plt.plot(x[x < 0.05], y[x < 0.05], linewidth=1, linestyle='-', color='b')
plt.plot(x[x > 0.05], y[x > 0.05], linewidth=1, linestyle='-', color='b')
Вам в этом случае необходимо указать цвет, иначе две области будут иметь разные цвета.Кроме того, если вам нужно обозначить строку для легенды, просто дайте одну из двух label
- если вы дадите одну для каждого региона, вы получите две записи легенды.