2017-04-22 135 views
2

我需要在對應於某些X值的Seaborn distplot上繪製點,以使它們落在密度曲線上或其下方。下面是從以下網址獲得distplot: From the Seaborn site - distplot examples對應於給定X值的Python Seaborn Distplot Y值

這裏與代碼的圖像:

enter image description here

因此,例如,在上面顯示的情節,我需要以編程方式確定什麼是與密度曲線上的0值相對應的Y軸值。從圖中看來,它似乎在0.37左右。我怎樣才能在我的程序中獲得?

假設可以完成,那麼如何在顯示的圖中顯示它,即,哪一行代碼將顯示該圖。我正在將一組R可視化轉換爲Python。在R下面的圖顯示了什麼,我想實現:

enter image description here

見曲線上顯示的點?有很多要點值得繪製,但如果你幫我畫一個,我可以嘗試去做其餘的。我是Matplotlib和Seaborn軟件包的初始用戶。

回答

2

enter image description here

爲了得到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曲線的某個點上繪製一個點。

  1. 看看文檔; distplot函數是否有一個我們想要的參數?不幸的是,
  2. 該函數是否返回一個對象?是。這是曲線嗎?不幸的是,相反,它是一個matplotlib軸。 (發現與type()
  3. 找出什麼是matplotlib軸;閱讀the documentation。 Uff,這很重,但我們偶然發現了一種方法axes.get_lines();因爲曲線應該是一條線,這應該有所幫助。
  4. 找出這些行是什麼:它們是Line2D對象。再次查看文檔,我們發現有一種方法get_data。所以現在我們有曲線的數據。大!
  5. 在這一點上,如果我們有一個函數可以用我們的x值調用來獲得相應的y值,那將會更好。現在看來,我們需要自己去找那個功能。
  6. 給出xy曲線的數據,我們如何找到給定x值的y值?由於數據是離散的,我們需要插值。尋找「內插」&「蟒蛇」最終將我們帶到numpy.interp。所以這給我們提供了需要繪製點的座標。
  7. 瞭解如何繪製一個點。那很容易。大量的例子。

就是這樣。

+0

這很好。我有一個後續問題。人們如何去了解這一點?或者,你是如何知道這一點的?你有沒有遵循的結構化路徑,或者這是通過經驗獲得的辛苦賺取的知識?我是一名經驗豐富的程序員,新手到Python,Seaborn更新,但現在已經編程了一段時間。有沒有獲取這些知識的方法? – Bharat

+0

我更新了答案,以包括從問題描述開始獲得解決方案的方式。這可能有助於瞭解過程。 – ImportanceOfBeingErnest

+0

謝謝你對這個過程的絕佳解釋。親切的問候。巴拉特 – Bharat