删除图的两个轴的间隔之外的数据点

时间:2019-01-29 16:47:19

标签: python python-3.x matplotlib

我正在尝试使用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 :(得分:1)

您可以将掩膜与索引一起使用。在这里,您将创建一个掩码以捕获介于4到6之间的y值。然后将此条件掩码应用于x_datay_data以获取相应的值。这样,您不需要任何for循环或列表理解。

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

答案 1 :(得分:0)

首先,您可以在y_data中获取y_data_2的索引,然后获取x_data的子数组x_data_2。然后,绘制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()