簡體   English   中英

刪除圖的兩個軸的間隔之外的數據點

[英]Removing datapoints outside interval for both axes of a plot

我正在嘗試使用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 <6)。 對於y_data,這是通過

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中的等效數據點? 另外,有沒有一種方法可以找到要刪除的點的索引?

謝謝。

您可以將掩膜與索引一起使用。 在這里,您將創建一個掩碼以捕獲介於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')

在此處輸入圖片說明

首先,您可以獲取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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM