爲了得到y座標爲distplot的KDE曲線上的點,則可以使用曲線的基礎數據。您可以使用該行的get_data
方法從線圖獲取數據。 然後,您可以在您感興趣的點上插入數據,使用例如numpy.interp
。
import seaborn.apionly as sns
import numpy as np; np.random.seed(0)
import matplotlib.pyplot as plt
x = np.random.randn(100)
ax = sns.distplot(x, hist_kws={"ec":"k"})
data_x, data_y = ax.lines[0].get_data()
xi = 0 # coordinate where to find the value of kde curve
yi = np.interp(xi,data_x, data_y)
print ("x={},y={}".format(xi, yi)) # prints x=0,y=0.3698
ax.plot([0],[yi], marker="o")
plt.show()
正在詢問有關如何獲取該解決方案的評論:
啓動的問題。我們有一個distplot,我們想要在它的kde曲線的某個點上繪製一個點。
- 看看文檔; distplot函數是否有一個我們想要的參數?不幸的是,
- 該函數是否返回一個對象?是。這是曲線嗎?不幸的是,相反,它是一個matplotlib軸。 (發現與
type()
)
- 找出什麼是matplotlib軸;閱讀the documentation。 Uff,這很重,但我們偶然發現了一種方法
axes.get_lines()
;因爲曲線應該是一條線,這應該有所幫助。
- 找出這些行是什麼:它們是
Line2D
對象。再次查看文檔,我們發現有一種方法get_data
。所以現在我們有曲線的數據。大!
- 在這一點上,如果我們有一個函數可以用我們的x值調用來獲得相應的y值,那將會更好。現在看來,我們需要自己去找那個功能。
- 給出
x
和y
曲線的數據,我們如何找到給定x值的y值?由於數據是離散的,我們需要插值。尋找「內插」&「蟒蛇」最終將我們帶到numpy.interp
。所以這給我們提供了需要繪製點的座標。
- 瞭解如何繪製一個點。那很容易。大量的例子。
就是這樣。
這很好。我有一個後續問題。人們如何去了解這一點?或者,你是如何知道這一點的?你有沒有遵循的結構化路徑,或者這是通過經驗獲得的辛苦賺取的知識?我是一名經驗豐富的程序員,新手到Python,Seaborn更新,但現在已經編程了一段時間。有沒有獲取這些知識的方法? – Bharat
我更新了答案,以包括從問題描述開始獲得解決方案的方式。這可能有助於瞭解過程。 – ImportanceOfBeingErnest
謝謝你對這個過程的絕佳解釋。親切的問候。巴拉特 – Bharat