Исключить значения графика выше и ниже значения

#python #matplotlib #plot

#python #matplotlib #график

Вопрос:

Я рисую несколько точек и хочу исключить все значения выше и ниже заданного диапазона.

Итак, я изобразил все свои точки как

 import numpy as np
import matplotlib.pylab as plt
  

У меня есть два массива: «величина» и «цвет», и уравнения, которые наилучшим образом подходят, поэтому я рисую как:

 plt.scatter(magnitude,color)
plt.plot(x,equation)
plt.plot(x,equation  0.5, linestyle =  '--')
plt.plot(x,equation-0.5, linestyle = '--')
  

где x — это просто некоторое пространство строк.
Это дает мне график, который выглядит следующим образом:
введите описание изображения здесь

это именно то, что я хочу, но теперь я хочу удалить все точки выше и ниже красных пунктирных линий (которые являются уравнением 0.5 и уравнением -0.5), но я действительно понятия не имею, как это сделать. Советы?

Комментарии:

1. Важна ли скорость для вашего результата?

2. ДА. у меня есть 482 графика для этого. в целом более миллиона точек данных, lol

3. Вам нужно перепроектировать вдоль этой оси или вы можете просто обрезать ее по горизонтали как можно ближе? Один из вариантов — просто выбрать только те данные, которые вы хотите, возможно, поместив ваши данные в pandas df и взяв фрагмент из диапазона значений, который вы хотите. Кроме того, является ли эта горизонтальная строка, которую вы показываете, переменной по своей природе? Может ли оно варьироваться вплоть до вертикали? Поскольку это лучше всего подходит, я предполагаю, что это так.

4. мне не нужно перепроектировать, просто поместите все значения выше и ниже строк. они линейные, но не горизонтальные

Ответ №1:

Вы можете использовать индексацию и создать маску, определяющую ваши граничные условия, поскольку ваш equation кажется массивом NumPy, поскольку вы выполняете арифметическую операцию ( 0.5 ) над ним как

 y1 = equation - 0.5
y2 = equation   0.5

mask = (color>y1) amp; (color<y2)

plt.scatter(magnitude[mask], color[mask])
plt.plot(x, equation)
plt.plot(x, y1, linestyle =  '--')
plt.plot(x, y2, linestyle = '--')
  

Комментарии:

1. похоже, что у этого есть потенциал для работы, но мой массив «equation» не такой длинный, как мой массив цветов, поэтому он не может транслировать элементы вместе

2. Затем вам нужно создать уравнение прямой линии для y1 и y2, а затем получить индексы значений, которые находятся между и двумя линиями

3. просто используйте первую и последнюю точки для создания уравнения прямой линии