Seaborn從零開始學習教程(一)

(點擊上方藍色,快速關注)

最近在做幾個項目的數據分析,每次用到seaborn進行可視化繪圖的時候總是忘記具體操作。雖然seaborn的官方網站已經詳細的介紹了使用方法,但是畢竟是英文,而且每次都上網查找不是很方便,還不如自己重新來一遍。因此博主想從零開始將seaborn學習一遍,做一個總結,也希望供大家使用參考。

Seaborn簡介

seabornmatplotlib一樣,也是Python進行數據可視化分析的重要第三方包。但 seaborn 是在 matplotlib 的基礎上進行了更高級的API封裝,使得作圖更加容易,圖形更加漂亮。

博主並不認爲seaborn可以替代matplotlib。雖然 seaborn 可以滿足大部分情況下的數據分析需求,但是針對一些特殊情況,還是需要用到 matplotlib 的。換句話說,matplotlib 更加靈活,可定製化,而 seaborn 像是更高級的封裝,使用方便快捷。

應該把seaborn視爲matplotlib的補充,而不是替代物。

Seaborn學習內容

seaborn的學習內容主要包含以下幾個部分:

  1. 風格管理

  • 繪圖風格設置

  • 顏色風格設置

  • 繪圖方法

    • 數據集的分佈可視化

    • 分類數據可視化

    • 線性關係可視化

  • 結構網格

    • 數據識別網格繪圖

    本次將主要介紹風格管理的使用。

    風格管理 - 繪圖風格設置

    除了各種繪圖方式外,圖形的美觀程度可能是我們最關心的了。將它放到第一部分,因爲風格設置是一些通用性的操作,對於各種繪圖方法都適用。

    讓我們先看一個例子。

    %matplotlib inline
    import numpy as np
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import seaborn as sns
    np.random.seed(sum(map(ord, "aesthetics")))

    我們定義了一個簡單的方程來繪製一些偏置的正弦波,用來幫助我們查看不同的圖畫風格是什麼樣子的。

    def sinplot(flip=1):
        x = np.linspace(0, 14, 100)
        for i in range(1, 7):
            plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)

    matplotlib默認參數下繪製結果是這樣的:

    sinplot()

    轉換爲seaborn默認繪圖,可以簡單的用set()方法。

    sns.set()
    sinplot()

    Seaborn 將 matplotlib 的參數劃分爲兩個獨立的組合。第一組是設置繪圖的外觀風格的,第二組主要將繪圖的各種元素按比例縮放的,以至可以嵌入到不同的背景環境中。

    操控這些參數的接口主要有兩對方法:

    • 控制風格:axes_style()set_style()

    • 縮放繪圖:plotting_context()set_context()

    每對方法中的第一個方法(axes_style()plotting_context())會返回一組字典參數,而第二個方法(set_style()set_context())會設置matplotlib的默認參數。

    Seaborn的五種繪圖風格

    有五種seaborn的風格,它們分別是:darkgridwhitegriddarkwhiteticks。它們各自適合不同的應用和個人喜好。默認的主題是darkgrid

    sns.set_style("whitegrid")
    data = np.random.normal(size=(20, 6)) + np.arange(6) / 2
    sns.boxplot(data=data);
    

    sns.set_style("dark")
    sinplot()
    

    sns.set_style("white")
    sinplot()
    

    sns.set_style("ticks")
    sinplot()

    移除軸脊柱

    white 和 ticks兩個風格都能夠移除頂部和右側的不必要的軸脊柱。通過matplotlib參數是做不到這一點的,但是你可以使用seaborndespine()方法來移除它們:

    sinplot()
    sns.despine()
    

    一些繪圖也可以針對數據將軸脊柱進行偏置,當然也是通過調用despine()方法來完成。而當刻度沒有完全覆蓋整個軸的範圍時,trim參數可以用來限制已有脊柱的範圍。

    f, ax = plt.subplots()
    sns.violinplot(data=data)
    sns.despine(offset=10, trim=True);
    

    你也可以通過despine()控制哪個脊柱將被移除。

    sns.set_style("whitegrid")
    sns.boxplot(data=data, palette="deep")
    sns.despine(left=True)

    臨時設置繪圖風格

    雖然來回切換風格很容易,但是你也可以在一個with語句中使用axes_style()方法來臨時的設置繪圖參數。這也允許你用不同風格的軸來繪圖:

    with sns.axes_style("darkgrid"):
        plt.subplot(211)
        sinplot()
    plt.subplot(212)
    sinplot(-1)

    覆蓋seaborn風格元素

    如果你想定製化seaborn風格,你可以將一個字典參數傳遞給axes_style()set_style()的參數rc。而且你只能通過這個方法來覆蓋風格定義中的部分參數。

    如果你想要看看這些參數都是些什麼,可以調用這個方法,且無參數,這將會返回下面的設置:

    sns.axes_style()
    {'axes.axisbelow': True,
     'axes.edgecolor': '.8',
     'axes.facecolor': 'white',
     'axes.grid': True,
     'axes.labelcolor': '.15',
     'axes.linewidth': 1.0,
     'figure.facecolor': 'white',
     'font.family': [u'sans-serif'],
     'font.sans-serif': [u'Arial',
      u'DejaVu Sans',
      u'Liberation Sans',
      u'Bitstream Vera Sans',
      u'sans-serif'],
     'grid.color': '.8',
     'grid.linestyle': u'-',
     'image.cmap': u'rocket',
     'legend.frameon': False,
     'legend.numpoints': 1,
     'legend.scatterpoints': 1,
     'lines.solid_capstyle': u'round',
     'text.color': '.15',
     'xtick.color': '.15',
     'xtick.direction': u'out',
     'xtick.major.size': 0.0,
     'xtick.minor.size': 0.0,
     'ytick.color': '.15',
     'ytick.direction': u'out',
     'ytick.major.size': 0.0,
     'ytick.minor.size': 0.0}
    

    然後,你可以設置這些參數的不同版本了。

    sns.set_style("darkgrid", {"axes.facecolor": ".9"})
    sinplot()

    繪圖元素比例縮放

    有一套的參數可以控制繪圖元素的比例。
    首先,讓我們通過
    set()重置默認的參數:

    sns.set()
    

    有四個預置的環境,按大小從小到大排列分別爲:papernotebooktalkposter。其中,notebook是默認的。

    sns.set_context("paper")
    sinplot()

    sns.set_context("talk")
    sinplot()

    sns.set_context("poster")
    sinplot()

    你可以通過使用這些名字中的一個調用set_context()來設置參數,並且你可以通過提供一個字典參數值來覆蓋參數。當改變環境時,你也可以獨立的去縮放字體元素的大小。

    sns.set_context("notebook", font_scale=1.5, rc={"lines.linewidth": 2.5})
    sinplot()

    同樣的,你可以通過嵌入with語句臨時的控制繪圖的比例。

    總結

    • 介紹了Seaborn的5中繪圖風格

    • 移除軸脊柱

    • 臨時設置繪圖風格

    • 覆蓋Seaborn風格元素

    • 繪圖元素比例縮放

    下一節將會介紹顏色風格的使用。

    發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章