<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 繪制 21 種超實(shí)用精美圖表

          共 18936字,需瀏覽 38分鐘

           ·

          2021-09-30 14:48

          導(dǎo)讀: 做過可視化的小伙伴們都會經(jīng)常聽到seaborn可視化,也有很多大佬平時(shí)使用的較多的可視化庫,今天我們就來盤下他,看看他有多實(shí)在。這里為了方便大家后面去練習(xí),所有展示數(shù)據(jù)均可從官網(wǎng)下載。


          Python可視化庫Seaborn基于matplotlib,并提供了繪制吸引人的統(tǒng)計(jì)圖形的高級接口。

          Seaborn就是讓困難的東西更加簡單。它是針對統(tǒng)計(jì)繪圖的,一般來說,能滿足數(shù)據(jù)分析90%的繪圖需求。Seaborn其實(shí)是在matplotlib的基礎(chǔ)上進(jìn)行了更高級的API封裝,從而使得作圖更加容易,在大多數(shù)情況下使用seaborn就能做出很具有吸引力的圖,應(yīng)該把Seaborn視為matplotlib的補(bǔ)充,而不是替代物。同時(shí)它能高度兼容numpy與pandas數(shù)據(jù)結(jié)構(gòu)以及scipy與statsmodels等統(tǒng)計(jì)模式。

          seaborn一共有5個(gè)大類21種圖,分別是:

          • Relational plots 關(guān)系類圖表
          1. relplot 關(guān)系類圖表的接口,其實(shí)是下面兩種圖的集成,通過指定kind參數(shù)可以畫出下面的兩種圖
          2. scatterplot 散點(diǎn)圖
          3. lineplot 折線圖
          • Categorical plots 分類圖表 catplot 分類圖表的接口,其實(shí)是下面八種圖表的集成,,通過指定kind參數(shù)可以畫出下面的八種圖
          1. stripplot 分類散點(diǎn)圖
          2. swarmplot 能夠顯示分布密度的分類散點(diǎn)圖
          3. boxplot 箱圖
          4. violinplot 小提琴圖
          5. boxenplot 增強(qiáng)箱圖
          6. pointplot 點(diǎn)圖
          7. barplot 條形圖
          8. countplot 計(jì)數(shù)圖
          • Distribution plot 分布圖
          1. jointplot 雙變量關(guān)系圖
          2. pairplot 變量關(guān)系組圖
          3. distplot 直方圖,質(zhì)量估計(jì)圖
          4. kdeplot 核函數(shù)密度估計(jì)圖
          5. rugplot 將數(shù)組中的數(shù)據(jù)點(diǎn)繪制為軸上的數(shù)據(jù)
          • Regression plots 回歸圖
          1. lmplot 回歸模型圖
          2. regplot 線性回歸圖
          3. residplot 線性回歸殘差圖
          • Matrix plots 矩陣圖
          1. heatmap 熱力圖
          2. clustermap 聚集圖

          導(dǎo)入模塊

          使用以下別名來導(dǎo)入庫:

          import matplotlib.pyplot as plt
          import seaborn as sns

          使用Seaborn創(chuàng)建圖形的基本步驟是:

          1. 準(zhǔn)備一些數(shù)據(jù)
          2. 控制圖美觀
          3. Seaborn繪圖
          4. 進(jìn)一步定制你的圖形
          5. 展示圖形
          import matplotlib.pyplot as plt 
          import seaborn as sns
          tips = sns.load_dataset("tips")    # Step 1
          sns.set_style("whitegrid")         # Step 2 
          g = sns.lmplot(x="tip",            # Step 3
                         y="total_bill",
                         data=tips,
                         aspect=2)            
          g = (g.set_axis_labels("Tip","Total bill(USD)") \
              .set(xlim=(0,10),ylim=(0,100)))                                                                                     
          plt.title("title")                 # Step 4
          plt.show(g) 

          若要在NoteBook中展示圖形,可使用魔法函數(shù):

          %matplotlib inline

          數(shù)據(jù)準(zhǔn)備

          import pandas as pd
          import numpy as np
          uniform_data = np.random.rand(1012)
          data = pd.DataFrame({'x':np.arange(1,101),
                               'y':np.random.normal(0,4,100)})

          Seaborn還提供內(nèi)置數(shù)據(jù)集

          # 直接加載,到網(wǎng)上拉取數(shù)據(jù)
          titanic = sns.load_dataset("titanic")
          iris = sns.load_dataset("iris")
          # 如果下載較慢,或加載失敗,可以下載到本地,然后加載本地路徑
          titanic = sns.load_dataset('titanic',data_home='seaborn-data',cache=True)
          iris = sns.load_dataset("iris",data_home='seaborn-data',cache=True)

          下載地址:https://github.com/mwaskom/seaborn-data

          圖片美觀

          創(chuàng)建畫布

          # 創(chuàng)建畫布和一個(gè)子圖
          f, ax = plt.subplots(figsize=(5,6))

          Seaborn 樣式

          sns.set()   #(重新)設(shè)置seaborn的默認(rèn)值
          sns.set_style("whitegrid")    #設(shè)置matplotlib參數(shù)
          sns.set_style("ticks",        #設(shè)置matplotlib參數(shù)
                       {"xtick.major.size"8
                        "ytick.major.size"8})
          sns.axes_style("whitegrid")   #返回一個(gè)由參數(shù)組成的字典,或使用with來臨時(shí)設(shè)置樣式

          設(shè)置繪圖上下文參數(shù)

          sns.set_context("talk")        # 設(shè)置上下文為“talk”

          sns.set_context("notebook",   # 設(shè)置上下文為"notebook",縮放字體元素和覆蓋參數(shù)映射
                          font_scale=1.5
                          rc={"lines.linewidth":2.5})

          調(diào)色板

          sns.set_palette("husl",3# 定義調(diào)色板
          sns.color_palette("husl"# 用with使用臨時(shí)設(shè)置調(diào)色板

          flatui = ["#9b59b6","#3498db","#95a5a6",
                    "#e74c3c","#34495e","#2ecc71"
          sns.set_palette(flatui)  # 自定義調(diào)色板

          Axisgrid 對象設(shè)置

          g.despine(left=True)      # 隱藏左邊線 
          g.set_ylabels("Survived"# 設(shè)置y軸的標(biāo)簽
          g.set_xticklabels(rotation=45)      # 為x設(shè)置刻度標(biāo)簽
          g.set_axis_labels("Survived","Sex"# 設(shè)置軸標(biāo)簽
          h.set(xlim=(0,5),         # 設(shè)置x軸和y軸的極限和刻度
                ylim=(0,5),
                xticks=[0,2.5,5],
                yticks=[0,2.5,5])

          plt設(shè)置

          plt.title("A Title")    # 添加圖標(biāo)題
          plt.ylabel("Survived")  # 調(diào)整y軸標(biāo)簽
          plt.xlabel("Sex")       # 調(diào)整x軸的標(biāo)簽
          plt.ylim(0,100)         # 調(diào)整y軸的上下限
          plt.xlim(0,10)          # 調(diào)整x軸的限制
          plt.setp(ax,yticks=[0,5]) # 調(diào)整繪圖屬性
          plt.tight_layout()      # 次要情節(jié)調(diào)整參數(shù)

          展示或保存圖片

          plt.show()
          plt.savefig("foo.png")
          plt.savefig("foo.png",   # 保存透明圖片
                      transparent=True)

          plt.cla()   # 清除軸
          plt.clf()   # 清除整個(gè)圖片
          plt.close() # 關(guān)閉窗口

          Seaborn繪圖

          relplot

          這是一個(gè)圖形級別的函數(shù),它用散點(diǎn)圖和線圖兩種常用的手段來表現(xiàn)統(tǒng)計(jì)關(guān)系。hue, col分類依據(jù),size將產(chǎn)生不同大小的元素的變量分組,aspect長寬比,legend_full每組均有條目。

          dots = sns.load_dataset('dots',
                      data_home='seaborn-data',
                      cache=True)
          # 將調(diào)色板定義為一個(gè)列表,以指定精確的值
          palette = sns.color_palette("rocket_r")

          # 在兩個(gè)切面上畫線
          sns.relplot(
              data=dots,
              x="time", y="firing_rate",
              hue="coherence", size="choice"
              col="align", kind="line"
              size_order=["T1""T2"], palette=palette,
              height=5, aspect=.75
              facet_kws=dict(sharex=False),
          )

          散點(diǎn)圖scatterplot

          diamonds = sns.load_dataset('diamonds',data_home='seaborn-data',cache=True)

          # 繪制散點(diǎn)圖,同時(shí)指定不同的點(diǎn)顏色和大小
          f, ax = plt.subplots(figsize=(86))
          sns.despine(f, left=True, bottom=True)
          clarity_ranking = ["I1""SI2""SI1""VS2""VS1""VVS2""VVS1""IF"]
          sns.scatterplot(x="carat", y="price",
                          hue="clarity", size="depth",
                          palette="ch:r=-.2,d=.3_r",
                          hue_order=clarity_ranking,
                          sizes=(18), linewidth=0,
                          data=diamonds, ax=ax)

          折線圖lineplot

          seaborn里的lineplot函數(shù)所傳數(shù)據(jù)必須為一個(gè)pandas數(shù)組。

          fmri = sns.load_dataset('fmri',data_home='seaborn-data',cache=True)
          # 繪制不同事件和地區(qū)的響應(yīng)
          sns.lineplot(x="timepoint", y="signal",
                       hue="region", style="event",
                       data=fmri)

          成組的柱狀圖catplot

          分類圖表的接口,通過指定kind參數(shù)可以畫出下面的八種圖

          stripplot 分類散點(diǎn)圖
          swarmplot 能夠顯示分布密度的分類散點(diǎn)圖
          boxplot 箱圖
          violinplot 小提琴圖
          boxenplot 增強(qiáng)箱圖
          pointplot 點(diǎn)圖
          barplot 條形圖
          countplot 計(jì)數(shù)圖

          penguins = sns.load_dataset('penguins',data_home='seaborn-data',cache=True)
          # 按物種和性別畫一個(gè)嵌套的引線圖
          g = sns.catplot(
              data=penguins, kind="bar",
              x="species", y="body_mass_g", hue="sex",
              ci="sd", palette="dark", alpha=.6, height=6)
          g.despine(left=True)
          g.set_axis_labels("""Body mass (g)")
          g.legend.set_title("")
          g.fig.set_size_inches(10,6# 設(shè)置畫布大小

          分類散點(diǎn)圖stripplot

          sns.stripplot(x="species",
                        y="petal_length",
                        data=iris)

          無重疊點(diǎn)的分類散點(diǎn)圖swarmplot

          能夠顯示分布密度的分類散點(diǎn)圖。

          sns.swarmplot(x="species",
                        y="petal_length",
                        data=iris)

          柱狀圖barplot

          用散點(diǎn)符號顯示點(diǎn)估計(jì)和置信區(qū)間。

          sns.barplot(x="sex",
                      y="survived",
                      hue="class",
                      data=titanic)

          計(jì)數(shù)圖countplot

          # 顯示觀測次數(shù)
          sns.countplot(x="deck",
                        data=titanic,
                        palette="Greens_d")

          點(diǎn)圖pointplot

          用矩形條顯示點(diǎn)估計(jì)和置信區(qū)間。

          點(diǎn)圖代表散點(diǎn)圖位置的數(shù)值變量的中心趨勢估計(jì),并使用誤差線提供關(guān)于該估計(jì)的不確定性的一些指示。點(diǎn)圖可能比條形圖更有用于聚焦一個(gè)或多個(gè)分類變量的不同級別之間的比較。他們尤其善于表現(xiàn)交互作用:一個(gè)分類變量的層次之間的關(guān)系如何在第二個(gè)分類變量的層次之間變化。連接來自相同色調(diào)等級的每個(gè)點(diǎn)的線允許交互作用通過斜率的差異進(jìn)行判斷,這比對幾組點(diǎn)或條的高度比較容易。

          sns.pointplot(x="class",
                        y="survived",
                        hue="sex",
                        data=titanic,
                        palette={"male":"g""female":"m"},
                        markers=["^","o"],
                        linestyles=["-","--"])

          箱形圖boxplot

          箱形圖(Box-plot)又稱為盒須圖、盒式圖或箱線圖,是一種用作顯示一組數(shù)據(jù)分散情況資料的統(tǒng)計(jì)圖。它能顯示出一組數(shù)據(jù)的最大值、最小值、中位數(shù)及上下四分位數(shù)。

          sns.boxplot(x="alive",
                      y="age",
                      hue="adult_male"# hue分類依據(jù)
                      data=titanic)
          # 繪制寬表數(shù)據(jù)箱形圖
          sns.boxplot(data=iris,orient="h")

          增強(qiáng)箱圖boxenplot

          boxenplot是為更大的數(shù)據(jù)集繪制增強(qiáng)的箱型圖。這種風(fēng)格的繪圖最初被命名為“信值圖”,因?yàn)樗@示了大量被定義為“置信區(qū)間”的分位數(shù)。它類似于繪制分布的非參數(shù)表示的箱形圖,其中所有特征對應(yīng)于實(shí)際觀察的數(shù)值點(diǎn)。通過繪制更多分位數(shù),它提供了有關(guān)分布形狀的更多信息,特別是尾部數(shù)據(jù)的分布。

          clarity_ranking = ["I1""SI2""SI1""VS2""VS1""VVS2""VVS1""IF"]
          f, ax = plt.subplots(figsize=(106))
          sns.boxenplot(x="clarity", y="carat",
                        color="orange", order=clarity_ranking,
                        scale="linear", data=diamonds,ax=ax)

          小提琴圖violinplot

          violinplot與boxplot扮演類似的角色,它顯示了定量數(shù)據(jù)在一個(gè)(或多個(gè))分類變量的多個(gè)層次上的分布,這些分布可以進(jìn)行比較。不像箱形圖中所有繪圖組件都對應(yīng)于實(shí)際數(shù)據(jù)點(diǎn),小提琴繪圖以基礎(chǔ)分布的核密度估計(jì)為特征。

          sns.violinplot(x="age",
                         y="sex",
                         hue="survived",
                         data=titanic)

          繪制條件關(guān)系的網(wǎng)格FacetGrid

          FacetGrid是一個(gè)繪制多個(gè)圖表(以網(wǎng)格形式顯示)的接口。

          g = sns.FacetGrid(titanic,
                            col="survived",
                            row="sex")
          g = g.map(plt.hist,"age")

          極坐標(biāo)網(wǎng)絡(luò)FacetGrid

          # 生成一個(gè)例子徑向數(shù)據(jù)集
          r = np.linspace(010, num=100)
          df = pd.DataFrame({'r': r, 'slow': r, 'medium'2 * r, 'fast'4 * r})

          # 將dataframe轉(zhuǎn)換為長格式或“整齊”格式
          df = pd.melt(df, id_vars=['r'], var_name='speed', value_name='theta')

          # 用極投影建立一個(gè)坐標(biāo)軸網(wǎng)格
          g = sns.FacetGrid(df, col="speed", hue="speed",
                            subplot_kws=dict(projection='polar'), height=4.5,
                            sharex=False, sharey=False, despine=False)

          # 在網(wǎng)格的每個(gè)軸上畫一個(gè)散點(diǎn)圖
          g.map(sns.scatterplot, "theta""r")

          將dataframe轉(zhuǎn)換為長格式或“整齊”格式過程

          分類圖factorplot

          # 在Facetgrid上繪制一個(gè)分類圖
          sns.factorplot(x="pclass",
                         y="survived",
                         hue="sex",
                         data=titanic)

          成對關(guān)系網(wǎng)格圖PairGrid

          h = sns.PairGrid(iris)    # 繪制成對關(guān)系的Subplot網(wǎng)格圖
          h = h.map(plt.scatter)

          雙變量分布pairplot

          變量關(guān)系組圖。

          sns.pairplot(iris)        # 繪制雙變量分布

          雙變量圖的網(wǎng)格與邊緣單變量圖JointGrid

          i = sns.JointGrid(x="x",  # 雙變量圖的網(wǎng)格與邊緣單變量圖
                            y="y",
                            data=data)
          i = i.plot(sns.regplot,
                     sns.distplot)

          二維分布jointplot

          用于兩個(gè)變量的畫圖,將兩個(gè)變量的聯(lián)合分布形態(tài)可視化出來往往會很有用。在seaborn中,最簡單的實(shí)現(xiàn)方式是使用jointplot函數(shù),它會生成多個(gè)面板,不僅展示了兩個(gè)變量之間的關(guān)系,也在兩個(gè)坐標(biāo)軸上分別展示了每個(gè)變量的分布。

          sns.jointplot("sepal_length",  # 繪制二維分布
                        "sepal_width",
                        data=iris,
                        kind='kde' # kind= "hex"就是兩個(gè)坐標(biāo)軸上顯示直方圖
                       )

          多元雙變量核密度估計(jì)kdeplot

          核密度估計(jì)(kernel density estimation)是在概率論中用來估計(jì)未知的密度函數(shù),屬于非參數(shù)檢驗(yàn)方法之一。通過核密度估計(jì)圖可以比較直觀的看出數(shù)據(jù)樣本本身的分布特征。

          f, ax = plt.subplots(figsize=(88))
          ax.set_aspect("equal")

          # 繪制等高線圖來表示每一個(gè)二元密度
          sns.kdeplot(
              data=iris.query("species != 'versicolor'"),
              x="sepal_width",
              y="sepal_length",
              hue="species",
              thresh=.1,)

          多變量直方圖histplot

          繪制單變量或雙變量直方圖以顯示數(shù)據(jù)集的分布。

          直方圖是一種典型的可視化工具,它通過計(jì)算離散箱中的觀察值數(shù)量來表示一個(gè)或多個(gè)變量的分布。該函數(shù)可以對每個(gè)箱子內(nèi)計(jì)算的統(tǒng)計(jì)數(shù)據(jù)進(jìn)行歸一化,以估計(jì)頻率、密度或概率質(zhì)量,并且可以添加使用核密度估計(jì)獲得的平滑曲線,類似于 kdeplot()

          f, ax = plt.subplots(figsize=(106))
          sns.histplot(
              diamonds,
              x="price", hue="cut",
              multiple="stack",
              palette="light:m_r",
              edgecolor=".3",
              linewidth=.5,
              log_scale=True,
          )
          ax.xaxis.set_major_formatter(mpl.ticker.ScalarFormatter())
          ax.set_xticks([50010002000500010000])

          單變量分布圖distplot

          在seaborn中想要對單變量分布進(jìn)行快速了解最方便的就是使用distplot函數(shù),默認(rèn)情況下它將繪制一個(gè)直方圖,并且可以同時(shí)畫出核密度估計(jì)(KDE)。

          plot = sns.distplot(data.y,
                              kde=False,
                              color='b')

          矩陣圖heatmap

          利用熱力圖可以看數(shù)據(jù)表里多個(gè)特征兩兩的相似度。

          sns.heatmap(uniform_data,vmin=0,vmax=1)

          分層聚集的熱圖clustermap

          # Load the brain networks example dataset
          df = sns.load_dataset("brain_networks", header=[012], index_col=0,data_home='seaborn-data',cache=True)

          # 選擇networks網(wǎng)絡(luò)的一個(gè)子集
          used_networks = [15678121317]
          used_columns = (df.columns.get_level_values("network")
                                    .astype(int)
                                    .isin(used_networks))
          df = df.loc[:, used_columns]

          # 創(chuàng)建一個(gè)分類調(diào)色板來識別網(wǎng)絡(luò)networks
          network_pal = sns.husl_palette(8, s=.45)
          network_lut = dict(zip(map(str, used_networks), network_pal))

          # 將調(diào)色板轉(zhuǎn)換為將繪制在矩陣邊的矢量
          networks = df.columns.get_level_values("network")
          network_colors = pd.Series(networks, index=df.columns).map(network_lut)

          # 繪制完整的圖
          g = sns.clustermap(df.corr(), center=0, cmap="vlag",
                             row_colors=network_colors, col_colors=network_colors,
                             dendrogram_ratio=(.1.2),
                             cbar_pos=(.02.32.03.2),
                             linewidths=.75, figsize=(1213))

          g.ax_row_dendrogram.remove()

          圖書推薦:Python Django Web從入門到項(xiàng)目實(shí)戰(zhàn)》Python的Django框架是目前流行的一款重量級網(wǎng)站開發(fā)框架,具備簡單易學(xué)、搭建快速、功能強(qiáng)大等特點(diǎn)。本書從簡單的HTML、CSS、JavaScript開始介紹,再到Django的基礎(chǔ)知識,融入了大量的代碼案例、重點(diǎn)提示、圖片展示,做到了手把手教授。本書基于Django 3.0.7版本、Python 3.8.5版本、Rest Framework 3.11.1版本、Vue.js 4.5.4版本、數(shù)據(jù)庫MySQL 8.0版本進(jìn)行講解。

          文章點(diǎn)贊超過100+

          我將在個(gè)人視頻號直播(老表Max)

          帶大家一起進(jìn)行項(xiàng)目實(shí)戰(zhàn)復(fù)現(xiàn)

          贈送對應(yīng)圖書1本



          掃碼即可加我微信

          老表朋友圈經(jīng)常有贈書/紅包福利活動


          學(xué)習(xí)更多:
          整理了我開始分享學(xué)習(xí)筆記到現(xiàn)在超過250篇優(yōu)質(zhì)文章,涵蓋數(shù)據(jù)分析、爬蟲、機(jī)器學(xué)習(xí)等方面,別再說不知道該從哪開始,實(shí)戰(zhàn)哪里找了
          點(diǎn)贊”就是對博主最大的支持 
          瀏覽 151
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

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

          手機(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>
                  亚洲网站免费观看 | 四虎影库久久久 | 久久午夜福利电影 | 日本黄色片视频 | 果冻传媒堕落人妻四玛丽莲A - 神秘资源 |