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

Я пытаюсь построить некоторые данные с помощью matplotlib.

import matplotlib.pyplot as plt

x_data = np.arange(0,100)
y_data = np.random.randint(11, size=(100,))
plt.plot(x_data, y_data)
plt.show

Это, конечно, отлично работает.Однако я хотел бы удалить данные, которые находятся за пределами заданного интервала (например, 4

y_data_2 = [x for x in y_data if 4 <= x <= 6]

Однако, поскольку первые измерения больше не равны, вы больше не можете строить график y_data_2 вместо x_data.Если вы попытаетесь набрать

plt.plot(x_data, y_data_2)

, вы, конечно, получите сообщение о том, что

ValueError: x and y must have same first dimension, but have shapes (100,) and (35,)

Таким образом, у меня двоякий вопрос: есть ли для меня простой способ удалить эквивалент?точки данных в x_data?Кроме того, есть ли способ, которым я мог бы найти индексы точек, которые должны быть удалены?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 29 января 2019

Вы можете использовать маскировку вместе с индексацией.Здесь вы создаете маску для захвата значений y, которые лежат между 4 и 6. Затем вы применяете эту условную маску к вашим x_data и y_data, чтобы получить соответствующие значения.Таким образом, вам не нужно ничего для циклического или списочного понимания.

x_data = np.arange(0,100)
y_data = np.random.randint(11, size=(100,))
mask = (y_data>=4) & (y_data<=6)

plt.plot(x_data[mask], y_data[mask], 'bo')

enter image description here

0 голосов
/ 29 января 2019

Сначала вы можете получить индекс y_data_2 в y_data, а затем получить подмассив x_data_2 в x_data.Затем нарисуйте x_data_2, y_data_2.

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

x_data = np.arange(0,100)
y_data = np.random.randint(11, size=(100,))
y = pd.Series(y_data)

y_data_2 = [x for x in y_data if 4 <= x <= 6]
index = y[y.isin(y_data_2)].index
print(index)
x_data_2 = x_data[index]
plt.plot(x_data, y_data)
plt.scatter(x_data_2, y_data_2)
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...