seaborn繪圖包的使用

Seaborn概述

Seaborn是基於matplotlib的Python數據可視化庫,並與pandas數據結構緊密集成。它提供了一個高級界面,用於繪製引人入勝且內容豐富的統計圖形。它相對matplotlib用起來很簡單,只需要簡單幾行代碼就能繪製出比較好的圖。

seaborn提供的一些功能

  1. 面向數據集的API,用於檢查多個變量之間的關係
  2. 專門支持使用分類變量顯示觀察結果或彙總統計信息
  3. 可視化單變量或雙變量分佈以及在數據子集之間進行比較的選項
  4. 不同種類因變量的線性迴歸模型的自動估計和繪圖
  5. 方便查看複雜數據集的整體結構
  6. 用於構造多圖網格的高級抽象,可讓您輕鬆構建複雜的可視化
  7. 帶有幾個內置主題的 matplotlib圖形樣式的精確控制
  8. 選擇能夠忠實顯示數據中圖案的調色板的工具
  9. 提供一些內置數據集

下面我會通過一些簡單繪圖,以及一些可視化的應用來介紹部分功能,由於Seaborn這個包相對還是比較多,我提到的只是一個片面,最好的學習資料永遠是官方文檔

內置數據集

seaborn自帶了一些數據,方便我們學習使用,這幾個數據集也是很好的數據可視化案例分析對象,我們可以查看一下相應自帶的那些數據集。但首先我們要做好準備工作,這個是不能忘的。

準備工作

首先查看一下我們電腦上安裝的seaborn版本是什麼樣,因爲不同版本號存在圖形和功能差異,這個小編踩過坑,同樣的代碼在不同版本的運行結果不同,有可能還會報錯,希望大家可以和我的版本一致,至於怎麼查看自己安裝的包對應的版本號和如何升級,這個我就不介紹了。

import seaborn as sns
sns.__version__

運行結果:

'0.9.0'

我們方便後面的進行,最好還做一下這些準備,注意我用的jupyter notebook環境編輯的,有些存在差異,自己修正就行了。

#準備工作
import matplotlib.pyplot as plt
%matplotlib inline
import numpy as np
import pandas as pd
plt.rcParams['font.sans-serif'] = ['SimHei']# 支持中文顯示
plt.rcParams['axes.unicode_minus'] = False #用來正常正負符號
sns.set_style('darkgrid',{'font.sans-serif':['SimHei','Arial']})
import warnings #去除部分警告信息
warnings.filterwarnings('ignore')

調用在線數據集

seaborn提供了一些在線數據集,方便我們入門學習使用,我們首先可以看看有哪些數據集:

names = sns.get_dataset_names()#查看seaborn自帶的數據集名稱
names

運行結果:

['anscombe',
 'attention',
 'brain_networks',
 'car_crashes',
 'diamonds',
 'dots',
 'exercise',
 'flights',
 'fmri',
 'gammas',
 'iris',
 'mpg',
 'planets',
 'tips',
 'titanic']

我們可能好奇這些數據集分別是什麼類型的數據集,具體是什麼,這個我們可以去github上面看這個鏈接
看到這裏我們就想知道怎麼調用這些數據了,主要利用seaborn.load_dataset()函數。我們可以看看這個函數的相關參數:

#Seaborn內置數據集
# seaborn.load_dataset(name,cache=True,data_home=None,**kws)
# Seaborn內置數據集可以通過load_dataset函數加載數據集,返回dataframe對象
# name 參數是數據集名字,https://github. com/mwaskom/seaborn-data定義數據集名。
# cache參數是否提供緩存。
# data_home參數是指定緩存路徑,默認當前用戶home下的seaborn-
# data 目錄中。
# sns. get_dataset_names ()獲得數據集名字

下面我以泰坦尼克號的數據爲例,給大家看看怎麼使用:

titanic=sns.load_dataset('titanic',cache=True)#導入泰坦尼克號數據集,以數據框的形式

當我們導入之後可以看看數據:

titanic.head(10)#顯示前十條數據,默認五條

運行結果:
在這裏插入圖片描述

seaborn主題風格與調色板設定

在python可視化中,Matplotlib自動化程度非常高,但是,掌握如何設置系統以便獲得一個吸引人的圖是相當困難的事。爲了控制matplotlib圖表的外觀,Seaborn模塊自帶許多定製的主題和高級的接口。在很多圖表設計的時候都是用這兩個模塊的結合。

主題風格

Seaborn中有五種可供選擇的主題:

1.darkgrid(灰色網格)
2.whitegrid(白色網格)
3.dark(黑色)
4.white(白色)
5.ticks(十字叉)

我們用簡單的圖示來展示一下,我們畫一個簡單的柱狀圖:

sns.set()#引入seaborn模塊,轉換成Seaborn模式畫圖,
sns.set_style('darkgrid')
plt.bar([1,2,3,4,5],[3,6,9,2,5])

運行結果如下:
在這裏插入圖片描述
seaborn默認淺灰色背景與白色網絡線,也就是這樣。

sns.set_style("dark")
plt.bar([1,2,3,4,5],[3,6,9,2,5])

運行結果:
在這裏插入圖片描述

sns.set_style("whitegrid")
plt.bar([1,2,3,4,5],[3,6,9,2,5])

運行結果是:
在這裏插入圖片描述

sns.set_style("white")
plt.bar([1,2,3,4,5],[3,6,9,2,5])

運行結果:
在這裏插入圖片描述

sns.set_style("ticks")
plt.bar([1,2,3,4,5],[3,6,9,2,5])

運行結果:
在這裏插入圖片描述
white和ticks這兩個主題其實很相似,white和ticks兩種主題都會包含沒有必要的上邊框和右邊框。我們可以用despine()函數去除。

sns.set_style("ticks")
plt.bar([1,2,3,4,5],[3,6,9,2,5])
sns.despine()#默認去除上面和右邊,可以修改

運行結果:
在這裏插入圖片描述
我們修改參數來選擇消失的線

seaborn.despine(fig=None, ax=None, top=True, right=True, left=False, bottom=False, offset=None, trim=False)
圖: matplotlib圖,可選該圖用於定義所有軸,默認使用當前圖。
ax : matplotlib軸,可選特定軸反對去脊椎。
頂部,右側,左側,底部: 布爾值,可選如果爲True,則刪除該脊椎。
offset : intdict,可選絕對距離(以磅爲單位),單個值適用於所有;字典可用於設置每側的偏移值。
trim: 布爾型,可選如果爲True,刻度限制

示例

sns.set_style("ticks")
plt.bar([1,2,3,4,5],[3,6,9,2,5])
sns.despine(top=False, right=False, left=True, bottom=True)

這只是作爲示例,這個圖非常醜:
在這裏插入圖片描述
除了可以用set_style()來設置風格,還可以用axes_style()。有興趣的去官方文檔查看,這裏我不做介紹。

sns.set_context()

seaborn.set_context(context = None,font_scale = 1,rc = None )
設置繪圖上下文參數。

我們可以試試:

sns.set_context("poster")
plt.bar([1,2,3,4,5],[3,6,9,2,5])
plt.title('柱狀圖')

運行結果:
在這裏插入圖片描述
但我們也可以結合matplotlib兩個包來繪圖:

sns.set_style('darkgrid',{'font.sans-serif':['SimHei','Arial']})
plt.bar([1,2,3,4,5],[3,6,9,2,5])
plt.title('柱狀圖')

運行結果爲:
在這裏插入圖片描述

調色板

seaborn.color_palette()

顏色在可視化中非常重要,用來代表各種特徵,並且提高整個圖的觀賞性。在seaborn中顏色主要分爲連續漸變性和離散分類性。
先說說分類色板,主要用color_palette()函數。

· color_palette()能傳入任何Matplotlib所支持的顏色
· color_palette()不寫參數則默認顏色
· set_palette()設置所有圖的顏色

6個默認的顏色循環主題: deep, muted, pastel, bright, dark, colorblind
首先我們可以查看一下color_palette方法返回默認的調色板信息:

#color_palette方法返回默認的調色板信息
current_palette = sns.color_palette()
print(current_palette)

輸出結果如下:

[(0.12156862745098039, 0.4666666666666667, 0.7058823529411765), (1.0, 0.4980392156862745, 0.054901960784313725), (0.17254901960784313, 0.6274509803921569, 0.17254901960784313), (0.8392156862745098, 0.15294117647058825, 0.1568627450980392), (0.5803921568627451, 0.403921568627451, 0.7411764705882353), (0.5490196078431373, 0.33725490196078434, 0.29411764705882354), (0.8901960784313725, 0.4666666666666667, 0.7607843137254902), (0.4980392156862745, 0.4980392156862745, 0.4980392156862745), (0.7372549019607844, 0.7411764705882353, 0.13333333333333333), (0.09019607843137255, 0.7450980392156863, 0.8117647058823529)]

默認的顏色只有十種,我們可以查看一下:

current_palette = sns.color_palette()
sns.palplot(current_palette)

運行結果:
在這裏插入圖片描述
如果,我們需要更多的顏色,使用hls色彩空間。

sns.palplot(sns.color_palette("hls", 15))

運行結果爲:
在這裏插入圖片描述
我們看一個例子:

data = np.random.normal(size=(20, 15)) + np.arange(15)
sns.boxplot(data=data, palette=sns.color_palette("hls", 15))

運行結果爲:
在這裏插入圖片描述
我們還可以通過hls_palette()函數來改變顏色的亮度和飽和度:

· l-亮度 lightness
· s-飽和度 saturation

我們可以看看這個:

sns.palplot(sns.hls_palette(15, l=0.3, s=0.8))

運行結果爲:
在這裏插入圖片描述
連續漸變顏色:
色彩隨數據變換,比如數據越來越重要則顏色越來越深。(只用在顏色加s即可)

#顏色漸變的調色板
sns.palplot(sns.color_palette("Reds"))

運行結果爲:
在這裏插入圖片描述
我們還可以多看幾個實例

#顏色漸變的調色板
sns.palplot(sns.color_palette("Purples"))

運行結果爲:
在這裏插入圖片描述

#顏色漸變的調色板
sns.palplot(sns.color_palette("Oranges"))

運行結果爲:
在這裏插入圖片描述
你們還可以用其他顏色加s多試試,種類很多。
如果想要翻轉漸變,可以在面板名稱中添加一個_r後綴。

sns.palplot(sns.color_palette("BuGn_r"))

運行結果爲:
在這裏插入圖片描述

sns.palplot(sns.color_palette("Accent_r"))

運行結果爲:
在這裏插入圖片描述
我們還可以查看一下其他類型顏色調色板。

sns.palplot(sns.color_palette("pastel"))

運行結果爲:
在這裏插入圖片描述

sns.palplot(sns.color_palette("colorblind"))

運行結果爲:
在這裏插入圖片描述

sns.palplot(sns.color_palette("dark"))

運行結果爲:
在這裏插入圖片描述

sns.palplot(sns.color_palette("bright"))

運行結果爲
在這裏插入圖片描述

sns.palplot(sns.color_palette("muted"))

運行結果爲:
在這裏插入圖片描述

sns.palplot(sns.color_palette("deep"))

運行結果爲:
在這裏插入圖片描述

sns.palplot(sns.color_palette("Accent",15))

運行結果爲:
在這裏插入圖片描述

seaborn.husl_palette()和seaborn.hls_palette()

我們可以在HUSL或HLS色系空間中獲得一組均勻分佈的顏色。

seaborn.husl_palette(n_colors = 6,h = 0.01,s = 0.9,l = 0.65#h,s和l應該在0到1之間
n_colors:整數,調色板中的顏色數
h:浮點數,第一色調
s:浮點數 飽和度
l:浮點數 亮度

我們可以看看:

sns.palplot(sns.husl_palette(10, h=.5))

運行結果爲:
在這裏插入圖片描述
還可以將飽和度,亮度這些改一下

sns.palplot(sns.hls_palette(15,h=0.5, l=0.7, s=0.8))

運行結果爲:
在這裏插入圖片描述

sns.palplot(sns.husl_palette(10, s=.4))

運行結果爲:
在這裏插入圖片描述
這個大家可以多試試其他參數,然後找到自己想要的顏色。這裏husl和hls
是兩種色相空間。注意區分,但參數的基本用法是一樣的。

3.seaborn.cubehelix_palette()

seaborn.cubehelix_palette(n_colors=6, start=0, rot=0.4, gamma=1.0, hue=0.8, light=0.85, dark=0.15, reverse=False, as_cmap=False)
# 從cubehelix系統製作順序調色板。
# 這將產生一個亮度線性降低(或增加)的色圖。這意味着,如果將信息打印爲黑白或由色盲人員查看,則將保留信息。“ cubehelix”也可以作爲基於matplotlib的調色板使用,但是此功能使用戶可以更好地控制調色板的外觀,並具有一組不同的默認值。
#這將產生一個亮度線性降低(或增加)的色圖。這意味着,如果將信息打印爲黑白或由色盲人員查看,則將保留信息。“ cubehelix”也可以作爲基於matplotlib的調色板使用,但是此功能使用戶可以更好地控制調色板的外觀,並具有一組不同的默認值。
# n_colors:int,調色板中的顏色數。
# start : float, 0 <= start <= 3,螺旋線開始處的色調。
# rot : float,在調色板範圍內圍繞飽和度輪旋轉。  
# gamma : float 0 <= gamma,強調深色(gamma <1)或較淺(gamma> 1)gamma。
# hue : float, 0 <= hue <= 1,顏色的飽和度
# dark : float 0 <= dark <= 1,調色板中最暗顏色的強度。
# light : float 0 <= light <= 1,調色板中最淺顏色的強度。
# reverse : bool,如果爲True,則調色板將從黑暗變爲明亮。
# as_cmap : bool,如果爲True,則返回matplotlib顏色圖,而不是顏色列表。

我們可以舉幾個例子看一下:

sns.palplot(sns.cubehelix_palette())

運行結果爲:![在這裏插入圖片描述](https://img-blog.csdnimg.cn/20191028222859654.png在這裏插入圖片描述

sns.palplot(sns.cubehelix_palette(rot=-.4))

運行結果爲:
在這裏插入圖片描述

 sns.palplot(sns.cubehelix_palette(start=2.8, rot=.3))

運行結果爲:
在這裏插入圖片描述

sns.palplot(sns.cubehelix_palette(reverse=True))

運行結果爲:
在這裏插入圖片描述
我們可以利用這個繪製混淆矩陣的顏色對照表:

x = np.arange(25).reshape(5, 5)
cmap = sns.cubehelix_palette(as_cmap=True)
ax = sns.heatmap(x, cmap=cmap)

運行結果爲:
在這裏插入圖片描述

light_palette() 和 dark_palette()

# seaborn.light_palette(color,n_colors = 6,reverse = False,as_cmap = False,input ='rgb' )製作從淺色到深色的順序調色板color。
# color:高值的基礎色 十六進制代碼,html顏色名稱或input空間中的元組。
# input ='rgb',{'rgb','hls','husl',xkcd'},色彩空間可解釋輸入顏色。前三個選項適用於元組輸入,後者適用於字符串輸入。
# seaborn.dark_palette(color,n_colors = 6,reverse = False,as_cmap = False,input ='rgb' )製作從黑色到稍微深顏色的順序調色板color。
# 其他參數和上面幾個函數是用法相同的

我們可以動手試試:

sns.palplot(sns.light_palette("purple"))

運行結果爲:
在這裏插入圖片描述

sns.palplot(sns.light_palette("green", reverse=True))

運行結果爲:
在這裏插入圖片描述

 sns.palplot(sns.light_palette((260, 75, 60), input="husl"))

運行結果爲:
在這裏插入圖片描述
我們對比可以看看dark的,這個比較偏深色系

sns.palplot(sns.dark_palette("purple"))

運行結果爲:
在這裏插入圖片描述

sns.palplot(sns.dark_palette("green",reverse=True))

運行結果爲:
在這裏插入圖片描述

sns.palplot(sns.dark_palette((260, 75, 60), input="husl"))

運行結果爲:
在這裏插入圖片描述

交互式調色組件

這裏介紹一個可以直接交互的顏色組件:

# seaborn.choose_cubehelix_palette(as_cmap = False )
# 啓動一個交互式窗口小部件,以創建一個順序的cubehelix調色板。
# 這與cubehelix_palette()功能相對應。這種調色板適用於介於相對較低的較低值和較高的較高值之間的數據。cubehelix系統允許調色板在整個範圍內具有更大的色相變化,這有助於區分更大範圍的值。
# as_cmap:布爾,如果爲True,則返回值爲matplotlib顏色圖,而不是離散顏色列表。
# pal或cmap:顏色列表或matplotlib顏色圖,可以傳遞給繪圖功能的對象。

我們可以看看:

#一個交互式的方法
sns.choose_cubehelix_palette()

運行結果爲:
在這裏插入圖片描述
這樣我們可以方便調參,然後調試到符合自己要的顏色,就可以找到對應參數及相關信息。

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