Скрытие всех точек над нанесенной линией в точечной диаграмме - PullRequest
0 голосов
/ 23 февраля 2019

Построение 2 списков эквивалентных соотношений ширины галактики. Я строю их друг против друга, затем я хочу исключить все точки выше линии y=(0.61)/(x-0.05)+1.3, чтобы на графике оставались только точки ниже.Вот что я имею до сих пор, и я смотрел на переполнение стека, но теряюсь, как это сделатьПримечание: я только хочу, чтобы пункты выше y не y2 были исключены, спасибо!

plt.scatter(NT,OT,s=5, c='r', marker='o')
x = np.linspace(-5,5,100)
y=(0.61)/(x-0.05)+1.3
y2 =((0.61)/(x-0.47)) + 1.19#
plt.plot(x, y, '-k')
plt.plot(x, y2, '--k')
plt.xlabel('log(NII/HA)', color='#1C2833')
plt.ylabel('log(OIII/HB)', color='#1C2833')
plt.ylim((-1,1.5))   
plt.xlim((-2,0.5))  

заранее спасибо за любые советы!

1 Ответ

0 голосов
/ 24 февраля 2019

Я считаю, что самый простой способ сделать это - просто отфильтровать нужные точки перед построением графика, вы можете сделать это с помощью

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()

Filtering demonstration

Чтобы удалить асимптоту, вы можете отфильтровать значения, большие и меньшие 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')

Filtering below line

Вам в этом случае необходимо указать цвет, иначе две области будут иметь разные цвета.Кроме того, если вам нужно обозначить строку для легенды, просто дайте одну из двух label - если вы дадите одну для каждого региона, вы получите две записи легенды.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...