資料視覺化Seaborn從零開始學習教程(一) 風格選擇

Python資料科學發表於2018-05-18

作者:xiaoyu

微信公眾號:Python資料科學

知乎:python資料分析師


最近在做幾個專案的資料分析,每次用到seaborn進行視覺化繪圖的時候總是忘記具體操作。雖然seaborn的官方網站已經詳細的介紹了使用方法,但是畢竟是英文,而且查詢不是很方便。因此博主想從零開始將seaborn學習一遍,做一個總結,也希望供大家使用參考。

Seaborn簡介

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

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

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

Seaborn學習內容

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

  1. 風格管理
    • 繪圖風格設定
    • 顏色風格設定
  2. 繪圖方法
    • 資料集的分佈視覺化
    • 分類資料視覺化
    • 線性關係視覺化
  3. 結構網格
    • 資料識別網格繪圖

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

風格管理 - 繪圖風格設定

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

讓我們先看一個例子。

%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從零開始學習教程(一) 風格選擇

轉換為seaborn預設繪圖,可以簡單的用set()方法。

sns.set()
sinplot()
複製程式碼

資料視覺化Seaborn從零開始學習教程(一) 風格選擇

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

操控這些引數的介面主要有兩對方法:

  • 控制風格:axes_style(), set_style()
  • 縮放繪圖:plotting_context(), set_context()

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

Seaborn的五種繪圖風格

有五種seaborn的風格,它們分別是:darkgrid, whitegrid, dark, white, ticks。它們各自適合不同的應用和個人喜好。預設的主題是darkgrid

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

資料視覺化Seaborn從零開始學習教程(一) 風格選擇

sns.set_style("dark")
sinplot()
複製程式碼

資料視覺化Seaborn從零開始學習教程(一) 風格選擇

sns.set_style("white")
sinplot()
複製程式碼

資料視覺化Seaborn從零開始學習教程(一) 風格選擇

sns.set_style("ticks")
sinplot()
複製程式碼

資料視覺化Seaborn從零開始學習教程(一) 風格選擇

移除軸脊柱

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

sinplot()
sns.despine()
複製程式碼

資料視覺化Seaborn從零開始學習教程(一) 風格選擇

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

f, ax = plt.subplots()
sns.violinplot(data=data)
sns.despine(offset=10, trim=True);
複製程式碼

資料視覺化Seaborn從零開始學習教程(一) 風格選擇

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

sns.set_style("whitegrid")
sns.boxplot(data=data, palette="deep")
sns.despine(left=True)
複製程式碼

資料視覺化Seaborn從零開始學習教程(一) 風格選擇

臨時設定繪圖風格

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

with sns.axes_style("darkgrid"):
    plt.subplot(211)
    sinplot()
plt.subplot(212)
sinplot(-1)
複製程式碼

資料視覺化Seaborn從零開始學習教程(一) 風格選擇

覆蓋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()
複製程式碼

資料視覺化Seaborn從零開始學習教程(一) 風格選擇

繪圖元素比例

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

sns.set()
複製程式碼

有四個預置的環境,按大小從小到大排列分別為:paper, notebook, talk, poster。其中,notebook是預設的。

sns.set_context("paper")
sinplot()
複製程式碼

資料視覺化Seaborn從零開始學習教程(一) 風格選擇

sns.set_context("talk")
sinplot()
複製程式碼

資料視覺化Seaborn從零開始學習教程(一) 風格選擇

sns.set_context("poster")
sinplot()
複製程式碼

資料視覺化Seaborn從零開始學習教程(一) 風格選擇

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

sns.set_context("notebook", font_scale=1.5, rc={"lines.linewidth": 2.5})
sinplot()
複製程式碼

資料視覺化Seaborn從零開始學習教程(一) 風格選擇

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

總結

介紹了Seaborn的5中繪圖風格

  • 移除軸脊柱
  • 臨時設定繪圖風格
  • 覆蓋Seaborn風格元素
  • 繪圖元素比例縮放

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


關注微信公眾號Python資料科學,獲取 120G 人工智慧 學習資料。

資料視覺化Seaborn從零開始學習教程(一) 風格選擇

資料視覺化Seaborn從零開始學習教程(一) 風格選擇

相關文章