簡體   English   中英

如何在seaborn.distplot中填充不同顏色的區域

[英]How to fill with a different color an area in seaborn.distplot

是否可以用兩個閾值線(line1和line2)之外的區域填充顏色,並通過distplot繪制的KDE曲線限制在Y軸?(表示我的應用程序的3-sigmas)

import pylab as pl
import seaborn as sns
#plotting the two lines
p1 = pl.axvline(x=line1,color='#EF9A9A')
p2 = pl.axvline(x=line2,color='#EF9A9A')
#plotting the PDF
sns.distplot(stat, hist=True,color='#388E3C')

結果圖

您可以使用fill_between來填充曲線下方的區域。 要從seaborn圖中訪問KDE曲線,您可以先繪制一條曲線,這樣ax.lines只有一個元素,這是感興趣的曲線。 其數據通過kde_x, kde_y = ax.lines[0].get_data()

然后使用ax.fill_between()允許填充曲線下的區域。 要將此限制在某個給定的數據范圍之外,可以使用where關鍵字參數(並且應設置interpolate=True以使該區域上升到所討論的點)。

ax.fill_between(kde_x, kde_y, where=(kde_x<x0) | (kde_x>x1) , 
                interpolate=True, color='#EF9A9A')

完整示例:

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

stat=np.random.randn(100)
x0 = -1
x1 = 1

#plotting the PDF (do this before plotting anything else)
ax = sns.distplot(stat, hist=True,color='#388E3C')
kde_x, kde_y = ax.lines[0].get_data()

#plotting the two lines
p1 = plt.axvline(x=x0,color='#EF9A9A')
p2 = plt.axvline(x=x1,color='#EF9A9A')


ax.fill_between(kde_x, kde_y, where=(kde_x<x0) | (kde_x>x1) , 
                interpolate=True, color='#EF9A9A')

plt.show()

由上面的代碼產生的圖像


最初問題的舊答案:

您可以使用axvspan ,從左邊的x限制開始,到第一行的位置,另一個從第二行的位置開始,然后到右邊的x限制。

 import numpy as np import matplotlib.pyplot as plt import seaborn as sns stat=np.random.randn(100) x0 = -1 x1 = 1 #plotting the two lines p1 = plt.axvline(x=x0,color='#EF9A9A') p2 = plt.axvline(x=x1,color='#EF9A9A') #plotting the PDF ax = sns.distplot(stat, hist=True,color='#388E3C') xlim = ax.get_xlim() ax.axvspan(xlim[0], x0, color='#EF9A9A', alpha=0.5) ax.axvspan(x1, xlim[1], color='#EF9A9A', alpha=0.5) #reset xlim ax.set_xlim(xlim) plt.show() 

由上面的代碼產生的圖像

在這里,我們需要在設置跨度后調整xlimits; 原因是,在跨度到位的情況下,自動縮放會在軸的兩端添加另外5%的填充,從而產生空白區域。 或者,您可以對xaxis使用零邊距, ax.margins(x=0)

暫無
暫無

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

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