<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          詳解seaborn可視化中的kdeplot、rugplot、distplot與jointplot

          共 6986字,需瀏覽 14分鐘

           ·

          2020-09-01 12:44


          點(diǎn)擊上方"藍(lán)字"關(guān)注我們





          Python大數(shù)據(jù)分析


          記錄? ?分享? ?成長(zhǎng)

          一、seaborn簡(jiǎn)介

          seaborn是Python中基于matplotlib的具有更多可視化功能和更優(yōu)美繪圖風(fēng)格的繪圖模塊,當(dāng)我們想要探索單個(gè)或一對(duì)數(shù)據(jù)分布上的特征時(shí),可以使用到seaborn中內(nèi)置的若干函數(shù)對(duì)數(shù)據(jù)的分布進(jìn)行多種多樣的可視化。

          本文以jupyter notebook為編輯工具,針對(duì)seaborn中的kdeplot、rugplot、distplot和jointplot,對(duì)其參數(shù)設(shè)置和具體用法進(jìn)行詳細(xì)介紹。

          二、kdeplot

          seaborn中的kdeplot可用于對(duì)單變量和雙變量進(jìn)行核密度估計(jì)并可視化,其主要參數(shù)如下:

          • data:一維數(shù)組,單變量時(shí)作為唯一的變量

          • data2:格式同data2,單變量時(shí)不輸入,雙變量作為第2個(gè)輸入變量

          • shade:bool型變量,用于控制是否對(duì)核密度估計(jì)曲線下的面積進(jìn)行色彩填充,True代表填充

          • vertical:bool型變量,在單變量輸入時(shí)有效,用于控制是否顛倒x-y軸位置

          • kernel:字符型輸入,用于控制核密度估計(jì)的方法,默認(rèn)為'gau',即高斯核,特別地在2維變量的情況下僅支持高斯核方法

          • legend:bool型變量,用于控制是否在圖像上添加圖例

          • cumulative:bool型變量,用于控制是否繪制核密度估計(jì)的累計(jì)分布,默認(rèn)為False

          • shade_lowest:bool型變量,用于控制是否為核密度估計(jì)中最低的范圍著色,主要用于在同一個(gè)坐標(biāo)軸中比較多個(gè)不同分布總體,默認(rèn)為True

          • cbar:bool型變量,用于控制是否在繪制二維核密度估計(jì)圖時(shí)在圖像右側(cè)邊添加比色卡

          • color:字符型變量,用于控制核密度曲線色彩,同plt.plot()中的color參數(shù),如'r'代表紅色

          • cmap:字符型變量,用于控制核密度區(qū)域的遞進(jìn)色彩方案,同plt.plot()中的cmap參數(shù),如'Blues'代表藍(lán)色系

          • n_levels:int型,在而為變量時(shí)有效,用于控制核密度估計(jì)的區(qū)間個(gè)數(shù),反映在圖像上的閉環(huán)層數(shù)

          下面我們來(lái)看幾個(gè)示例來(lái)熟悉kdeplot中上述參數(shù)的實(shí)際使用方法:

          首先我們需要準(zhǔn)備數(shù)據(jù),本文使用seaborn中自帶的鳶尾花數(shù)據(jù)作為示例數(shù)據(jù),因?yàn)樵趈upyter notebook中運(yùn)行代碼,所以加上魔術(shù)命令%matplotlib inline使得圖像得以在notebook中顯示。

          import?seaborn?as?sns
          sns.set(color_codes=True)
          import?matplotlib.pyplot?as?plt
          %matplotlib?inline
          #加載seaborn自帶的鳶尾花數(shù)據(jù)集,格式為數(shù)據(jù)框
          iris?=?sns.load_dataset('iris')
          #分離出setosa類的花對(duì)應(yīng)的屬性值
          setosa?=?iris.loc[iris.species?==?"setosa"].reset_index(drop=True)
          #分離出virginica類的花對(duì)應(yīng)的屬性值
          virginica?=?iris.loc[iris.species?==?"virginica"].reset_index(drop=True)

          首先我們不修改其他參數(shù)只傳入數(shù)據(jù)來(lái)觀察繪制出的圖像:

          #繪制iris中petal_width參數(shù)的核密度估計(jì)圖
          ax?=?sns.kdeplot(iris.petal_width)

          加上紅色填充顏色,并禁止圖例顯示:

          ax?=?sns.kdeplot(iris.petal_width,shade=True,color='r')

          修改為核密度分布:

          ax?=?sns.kdeplot(iris.petal_width,
          ?????????????????shade=True,
          ?????????????????color='r',
          ?????????????????cumulative=True)

          交換x-y軸位置:

          ax?=?sns.kdeplot(iris.petal_width,
          ?????????????????shade=True,
          ?????????????????color='r',
          ?????????????????vertical=True)

          下面我們來(lái)繪制雙變量聯(lián)合核密度估計(jì)圖:

          #繪制setosa花的petal_width與petal_length的聯(lián)合核密度估計(jì)圖
          ax?=?sns.kdeplot(setosa.petal_width,
          ?????????????????setosa.petal_length)

          修改調(diào)色方案為藍(lán)色,并設(shè)置shade_lowest=True:

          ax?=?sns.kdeplot(setosa.petal_width,
          ?????????????????setosa.petal_length,
          ?????????????????cmap='Blues',
          ?????????????????shade=True,
          ?????????????????shade_lowest=True)

          在上圖基礎(chǔ)上修改shade_lowest=False:

          ax?=?sns.kdeplot(setosa.petal_width,
          ?????????????????setosa.petal_length,
          ?????????????????cmap='Blues',
          ?????????????????shade=True,
          ?????????????????shade_lowest=False)

          可以看到這時(shí)最低密度估計(jì)曲線之外的區(qū)域沒(méi)有被調(diào)色方案所浸染。

          將核密度曲線區(qū)間個(gè)數(shù)修改為5:

          ax?=?sns.kdeplot(setosa.petal_width,
          ?????????????????setosa.petal_length,
          ?????????????????cmap='Blues',
          ?????????????????shade=True,
          ?????????????????shade_lowest=False,
          ?????????????????n_levels=5)

          可以看到這時(shí)的核密度區(qū)間要粗略很多。

          在同一個(gè)子圖中繪制兩個(gè)不同一維總體的核密度估計(jì)圖,這里為了把它們區(qū)分開(kāi)分別定義了label參數(shù)以顯示在圖例中:

          ax1?=?sns.kdeplot(setosa.petal_width,label='setosa.petal_width')
          ax2?=?sns.kdeplot(virginica.petal_width,label='virginica.petal_width')

          在同一個(gè)子圖中繪制兩個(gè)不同二維總體的核密度估計(jì)圖:

          ax1?=?sns.kdeplot(setosa.sepal_width,setosa.sepal_length,
          ??????????????????cmap='Blues',
          ??????????????????shade=True,
          ??????????????????shade_lowest=False)
          ax2?=?sns.kdeplot(virginica.sepal_width,virginica.sepal_length,
          ??????????????????cmap='Greens',
          ??????????????????shade=True,
          ??????????????????shade_lowest=False)

          三、rugplot

          rugplot的功能非常樸素,用于繪制出一維數(shù)組中數(shù)據(jù)點(diǎn)實(shí)際的分布位置情況,即不添加任何數(shù)學(xué)意義上的擬合,單純的將記錄值在坐標(biāo)軸上表現(xiàn)出來(lái),相對(duì)于kdeplot,其可以展示原始的數(shù)據(jù)離散分布情況,其主要參數(shù)如下:

          • a:一維數(shù)組,傳入觀測(cè)值向量

          • height:設(shè)置每個(gè)觀測(cè)點(diǎn)對(duì)應(yīng)的小短條的高度,默認(rèn)為0.05

          • axis:字符型變量,觀測(cè)值對(duì)應(yīng)小短條所在的軸,默認(rèn)為'x',即x軸

          使用默認(rèn)參數(shù)進(jìn)行繪制:

          ax?=?sns.rugplot(iris.petal_length)

          調(diào)換所處的坐標(biāo)軸:

          ax?=?sns.rugplot(iris.petal_length,axis='y')

          修改小短條高度和顏色:

          ax?=?sns.rugplot(iris.petal_length,
          ?????????????????color='r',
          ?????????????????height=0.2)

          四、distplot

          seaborn中的distplot主要功能是繪制單變量的直方圖,且還可以在直方圖的基礎(chǔ)上施加kdeplot和rugplot的部分內(nèi)容,是一個(gè)功能非常強(qiáng)大且實(shí)用的函數(shù),其主要參數(shù)如下:

          • a:一維數(shù)組形式,傳入待分析的單個(gè)變量

          • bins:int型變量,用于確定直方圖中顯示直方的數(shù)量,默認(rèn)為None,這時(shí)bins的具體個(gè)數(shù)由Freedman-Diaconis準(zhǔn)則來(lái)確定

          • hist:bool型變量,控制是否繪制直方圖,默認(rèn)為True

          • kde:bool型變量,控制是否繪制核密度估計(jì)曲線,默認(rèn)為True

          • rug:bool型變量,控制是否繪制對(duì)應(yīng)rugplot的部分,默認(rèn)為False

          • fit:傳入scipy.stats中的分布類型,用于在觀察變量上抽取相關(guān)統(tǒng)計(jì)特征來(lái)強(qiáng)行擬合指定的分布,下文的例子中會(huì)有具體說(shuō)明,默認(rèn)為None,即不進(jìn)行擬合

          • hist_kws,kde_kws,rug_kws:這幾個(gè)變量都接受字典形式的輸入,鍵值對(duì)分別對(duì)應(yīng)各自原生函數(shù)中的參數(shù)名稱與參數(shù)值,在下文中會(huì)有示例

          • color:用于控制除了fit部分?jǐn)M合出的曲線之外的所有對(duì)象的色彩

          • vertical:bool型,控制是否顛倒x-y軸,默認(rèn)為False,即不顛倒

          • norm_hist:bool型變量,用于控制直方圖高度代表的意義,為True直方圖高度表示對(duì)應(yīng)的密度,為False時(shí)代表的是對(duì)應(yīng)的直方區(qū)間內(nèi)記錄值個(gè)數(shù),默認(rèn)為False

          • label:控制圖像中的圖例標(biāo)簽顯示內(nèi)容

          使用默認(rèn)參數(shù)進(jìn)行繪制:

          ax?=?sns.distplot(iris.petal_length)

          修改所有對(duì)象的顏色,繪制rugplot部分,并修改bins為20:

          ax?=?sns.distplot(iris.petal_length,color='r',
          ?????????????????rug=True,
          ?????????????????bins=20)

          在上圖的基礎(chǔ)上強(qiáng)行擬合卡方分布并利用參數(shù)字典設(shè)置fit曲線為綠色:

          from?scipy.stats?import?chi2????????????????
          ax?=?sns.distplot(iris.petal_length,color='r',
          ?????????????????rug=True,
          ?????????????????bins=20,
          ?????????????????fit=chi2,
          ?????????????????fit_kws={'color':'g'})

          修改norm_hist參數(shù)為False使得縱軸顯示的不再是密度而是頻數(shù)(注意這里必須關(guān)閉kde和fit繪圖的部分,否則縱軸依然顯示密度),利用hist_kws傳入字典調(diào)整直方圖部分色彩和透明度,利用rug_kws傳入字典調(diào)整rugplot部分小短條色彩:

          ax?=?sns.distplot(iris.petal_length,color='r',
          ?????????????????rug=True,
          ?????????????????kde=False,
          ?????????????????bins=20,
          ?????????????????fit=None,
          ?????????????????hist_kws={'alpha':0.6,'color':'orange'},
          ?????????????????rug_kws={'color':'g'},
          ?????????????????norm_hist=False)

          五、jointplot

          之所以按照kdeplot-rugplot-distplot的順序來(lái)介紹是因?yàn)閐istplot中涉及到kdeplot與rugplot中的相關(guān)內(nèi)容,而本文最后要介紹的函數(shù)jointplot中聚合了前面所涉及到的眾多內(nèi)容,用于對(duì)成對(duì)變量的相關(guān)情況、聯(lián)合分布以及各自的分布在一張圖上集中呈現(xiàn),其主要參數(shù)如下:

          • x,y:代表待分析的成對(duì)變量,有兩種模式,第一種模式:在參數(shù)data傳入數(shù)據(jù)框時(shí),x、y均傳入字符串,指代數(shù)據(jù)框中的變量名;第二種模式:在參數(shù)data為None時(shí),x、y直接傳入兩個(gè)一維數(shù)組,不依賴數(shù)據(jù)框

          • data:與上一段中的說(shuō)明相對(duì)應(yīng),代表數(shù)據(jù)框,默認(rèn)為None

          • kind:字符型變量,用于控制展示成對(duì)變量相關(guān)情況的主圖中的樣式

          • color:控制圖像中對(duì)象的色彩

          • height:控制圖像為正方形時(shí)的邊長(zhǎng)

          • ratio:int型,調(diào)節(jié)聯(lián)合圖與邊緣圖的相對(duì)比例,越大則邊緣圖越矮,默認(rèn)為5

          • space:int型,用于控制聯(lián)合圖與邊緣圖的空白大小

          • xlim,ylim:設(shè)置x軸與y軸顯示范圍

          • joint_kws,marginal_kws,annot_kws:傳入?yún)?shù)字典來(lái)分別精細(xì)化控制每個(gè)組件

          在默認(rèn)參數(shù)設(shè)置下繪制成對(duì)變量聯(lián)合圖:

          ax?=?sns.jointplot(x='sepal_length',y='sepal_width',data=setosa)

          值得一提的是,jointplot還貼心的在圖像上說(shuō)明了成對(duì)變量之間的皮爾遜簡(jiǎn)單相關(guān)系數(shù)以及相關(guān)性檢驗(yàn)的p值結(jié)果。

          將kind參數(shù)設(shè)置為'reg',為聯(lián)合圖添加線性回歸擬合直線與核密度估計(jì)結(jié)果:

          ax?=?sns.jointplot(x='sepal_length',y='sepal_width',data=setosa,
          ??????????????????kind='reg')

          修改kind為'hex'來(lái)為聯(lián)合圖生成六邊形核密度估計(jì):

          ax?=?sns.jointplot(x='sepal_length',y='sepal_width',data=setosa,
          ??????????????????kind='hex')

          修改kind為'kde'來(lái)將直方圖和散點(diǎn)圖轉(zhuǎn)換為核密度估計(jì)圖,并將邊際軸的留白大小設(shè)定為0:

          ax?=?sns.jointplot(x='sepal_length',y='sepal_width',data=setosa,
          ???????????????????kind='kde',
          ???????????????????space=0,
          ???????????????????color='g')

          jointplot還支持圖層疊加,如下面的例子,我們首先繪制出的聯(lián)合圖中kind限制為擬合線性回歸直線,在此基礎(chǔ)上利用.plot_joint方法疊加核密度估計(jì)圖層:

          ax?=?(sns.jointplot(x='sepal_length',y='sepal_width',data=setosa,
          ???????????????????color='g',
          ???????????????????kind='reg')).plot_joint(sns.kdeplot,?zorder=0,?n_levels=10)

          根據(jù)你的具體需要還可以疊加出更加豐富的圖像。

          調(diào)大ratio參數(shù)使得邊緣圖更加小巧:

          ax?=?sns.jointplot(x='sepal_length',y='sepal_width',data=setosa,
          ???????????????????kind='kde',
          ???????????????????space=0,
          ???????????????????color='g',
          ???????????????????ratio=15)

          利用邊緣圖形參數(shù)字典為邊緣圖形添加rugplot的內(nèi)容,并修改直方個(gè)數(shù)為15:

          ax?=?sns.jointplot(x='sepal_length',y='sepal_width',data=setosa,
          ???????????????????marginal_kws=dict(bins=15,?rug=True),
          ???????????????????linewidth=1,space=0)

          實(shí)際上,如果你足夠了解matplotlib與seaborn,可以通過(guò)各種組合得到信息量更豐富特別的圖像!

          以上就是本文的全部?jī)?nèi)容,如有筆誤望指出!


          添加微信號(hào)"CNFeffery"加入技術(shù)交流群



          · 往期精選 ·
          1

          jieba分詞-Python中文分詞領(lǐng)域的佼佼者

          2

          QGIS+Conda+jupyter玩轉(zhuǎn)Python GIS

          3

          pandas參數(shù)設(shè)置小技巧




          Python大數(shù)據(jù)分析

          data creates?value

          掃碼關(guān)注我們

          瀏覽 138
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  最好看的MV中文字幕国语电影 | 欧美成人国产精品高潮 | 高清无码网 | 韩国三级电影HD中文久久免费 | 五月天中文字幕 |