我正在尝试使用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_data。如果您尝试 当然,您会得到一条错误消息,说明这一点 因此,我的问题有两个方面:是否有一种简单的方法可以删除x_data中的等效数据点?另外,有没有办法找到要删除的点的索引? 谢谢。y_data_2 = [x for x in y_data if 4 <= x <= 6]
plt.plot(x_data, y_data_2)
ValueError: x and y must have same first dimension, but have shapes (100,) and (35,)
答案 0 :(得分:1)
您可以将掩膜与索引一起使用。在这里,您将创建一个掩码以捕获介于4到6之间的y值。然后将此条件掩码应用于x_data
和y_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')
答案 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()