簡體   English   中英

Python-Matplotlib軸限制了大約股票行情指示器的位置

[英]Python - matplotlib axes limits approximate ticker location

如果未指定軸限制,則matplotlib會選擇默認值作為尼斯,四舍五入的整數,該數字在要繪制的列表中的最小值和最大值上下。

有時我的數據中包含異常值,並且在選擇軸時不希望包含這些異常值。 我可以檢測到異常值,但是我不想刪除它們,只是讓它們超出了圖的范圍。 我嘗試將軸設置為列表中的最小值和最大值(不包括離群值),但這意味着這些值正好位於軸上,並且圖的邊界不與標記點對齊。

有沒有一種方法可以指定軸限制應在某個范圍內,但是讓matplotlib選擇一個合適的點?

例如,以下代碼生成了一個漂亮的圖,其中y軸限制自動設置為(0.140,0.165):

from matplotlib import pyplot as plt
plt.plot([0.144490353418, 0.142921640661, 0.144511781706, 0.143587888773, 0.146009766101, 0.147241517391, 0.147224266382, 0.151530932135, 0.158778411784, 0.160337332636])
plt.show()

從第一個代碼示例繪制。

在數據中引入異常值並手動設置限制后,將y軸限制設置為略低於0.145和略高於0.160-不那么整潔。

from matplotlib import pyplot as plt
plt.plot([0.144490353418, 0.142921640661, 0.144511781706, 0.143587888773, 500000, 0.146009766101, 0.147241517391, 0.147224266382, 0.151530932135, 0.158778411784, 0.160337332636])
plt.ylim(0.142921640661, 0.160337332636)
plt.show()

從第二個代碼示例中繪制。

有什么方法可以告訴matplotlib在設置限制時忽略異常值,或將軸設置為“低於0.142921640661”和“高於0.160337332636”,但讓其決定合適的位置嗎? 我無法簡單地對數字進行四舍五入,因為我的所有數據集都以不同的規模發生。

您可以將data 設為屏蔽數組

from matplotlib import pyplot as plt
import numpy as np

data = [0.144490353418, 0.142921640661, 0.144511781706, 0.143587888773, 500000, 0.146009766101, 0.147241517391, 0.147224266382, 0.151530932135, 0.158778411784, 0.160337332636]
data = np.ma.array(data, mask=False)
data.mask = data>0.16
plt.plot(data)
plt.show()

在此處輸入圖片說明

unutbu實際上給了我一個解決問題的想法。 這不是最有效的解決方案,因此,如果有人有其他想法,我將不知所措。

編輯:我最初是像unutbu所說的那樣掩蓋數據,但是實際上並沒有正確設置軸。 我必須從數據中刪除異常值。

從數據中刪除異常值后,可以繪制剩余值並獲得y軸限制。 然后可以再次繪制具有離群值的數據,但要從第一個圖設置極限。

from matplotlib import pyplot as plt

data = [0.144490353418, 0.142921640661, 0.144511781706, 0.143587888773, 500000, 0.146009766101, 0.147241517391, 0.147224266382, 0.151530932135, 0.158778411784, 0.160337332636]
cleanedData = remove_outliers(data) #Function defined by me elsewhere.
plt.plot(cleanedData)

ymin, ymax = plt.ylim()
plt.clf()
plt.plot(data)
plt.ylim(ymin,ymax)
plt.show()

暫無
暫無

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

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