2017-09-02 28 views
0

在情況下,進口 作爲numpy的NP 進口matplotlib.pyplot作爲PLT當使用matplotlib製作圖形時,我如何選擇範圍?

x = np.linspace(0, 10, 20) 
y = x**2 + 2 

通常作出plt.plot(X,Y)圖表 ,但我有無用部分。 我認爲這使得新的數組,然後追加。

t = np.array([]) 
for i in range(len(x)): 
    if 4 < i and i < 9: 
     continue 
    t = np.append(t,x[i]) 

plt.plot(t,y) 

或 的new_x = np.array([])

for i in range(len(x)): 
    if 4<i and i<9: 
     new_x = np.delete(x,i) 
plt.plot(new_x,y) 

所以,我可以刪除無用部分。 有沒有人知道更適合工作時間的好主意?我有很多數據。

回答

0

請問plt.xlim(4, 9)做你想要的嗎?這隻會限制顯示的區域,而且您仍然可以傳入所有數據。


好了,如果你真的需要切出有趣的部分,下面可能是一個辦法。請注意,它將數據限制爲x的值,而不是索引,如您的示例中所示。

x = np.linspace(0, 10, 20) 
y = x**2 + 2 
interesting_indices = np.argwhere(np.logical_and(x > 4, x < 9)) 

plt.plot(x[interesting_indices], y[interesting_indices]) 

另外的想法:

  • 始終嘗試使用numpy的的內置元素方面的業務,而不是遍歷在Python本身的項目。在通過調用之後,numpy會計算並處理基於C和Fortran核心的數據,這通常會帶來更好的性能。
  • 使用np.append時,它總是返回大小增加1的舊數組的副本,然後刪除舊數組。這是很多內存分配和再次釋放,因此非常沒有效率。性能方面,它甚至應該更好地使用list

    a2 = [val for val in x if 4 < val < 9]

  • 請記住,也減少y以同樣的方式爲你減少x,否則情節無法比擬的數據互傳。

+0

沒有,我發現到時間間隔設置時使用plt.plot –

+0

好的方式。我用一個如何做到這一點的例子來編輯答案。 – Jeronimo

+0

謝謝。雖然我寫的代碼非常糟糕(這不起作用,哈哈),但你很聰明。 –

相關問題