Seaborn之繪圖風(fēng)格設(shè)置

Seaborn簡介

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

seaborn并不能替代matplotlib。雖然seaborn可以滿足大部分情況下的數(shù)據(jù)分析需求产上,但是針對一些特殊情況,還是需要用到matplotlib的蛾狗。換句話說晋涣,matplotlib更加靈活,可定制化沉桌,而seaborn像是更高級的封裝谢鹊,使用方便快捷。

應(yīng)該把seaborn視為matplotlib的補充留凭,而不是替代物佃扼。

繪圖風(fēng)格設(shè)置

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

首先,我們定義一個簡單的函數(shù)來繪制一些正弦波蔼夜,用于測試

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)

sinplot()
seaborn1.png

轉(zhuǎn)換為seaborn默認繪圖兼耀,可以簡單的用set()方法。

import seaborn as sns

sns.set()
sinplot()
seaborn2.png

Seaborn 將 matplotlib 的參數(shù)劃分為兩個獨立的組合求冷。第一組是設(shè)置繪圖的外觀風(fēng)格的瘤运,第二組主要將繪圖的各種元素按比例縮放的,以至可以嵌入到不同的背景環(huán)境中匠题。

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

控制風(fēng)格:axes_style(), set_style()
縮放繪圖:plotting_context(), set_context()
每對方法中的第一個方法(axes_style(), plotting_context())會返回一組字典參數(shù)拯坟,而第二個方法(set_style(), set_context())會設(shè)置matplotlib的默認參數(shù)。

Seaborn的五種繪圖風(fēng)格

有五種seaborn的風(fēng)格韭山,它們分別是:darkgrid, whitegrid, dark, white, ticks郁季。它們各自適合不同的應(yīng)用和個人喜好。默認的主題是darkgrid钱磅。

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

<matplotlib.axes._subplots.AxesSubplot at 0x1a1ae6da20>
seaborn3.png
sns.set_style('dark')
sinplot()
seaborn4.png
sns.set_style('white')
sinplot()
seaborn5.png
sns.set_style('ticks')
sinplot()
seaborn6.png

移除軸脊柱

white和ticks兩種風(fēng)格都可以移除頂部和右側(cè)的不必要的軸脊柱巩踏。使用matplotlib是無法實現(xiàn)這一需求的,但是使用seaborn的despine()方法可以實現(xiàn)续搀。

sinplot()
sns.despine()
seaborn7.png

一些繪圖也可以針對數(shù)據(jù)將軸脊柱進行偏置,當然也是通過調(diào)用despine()方法來完成菠净。而當刻度沒有完全覆蓋整個軸的范圍時禁舷,trim參數(shù)可以用來限制已有脊柱的范圍彪杉。

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

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

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

臨時設(shè)置繪圖風(fēng)格

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

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

覆蓋seaborn風(fēng)格元素

如果你想定制化seaborn風(fēng)格,你可以將一個字典參數(shù)傳遞給axes_style()和set_style()的參數(shù)rc洁桌。而且你只能通過這個方法來覆蓋風(fēng)格定義中的部分參數(shù)渴丸。

如果你想要看看這些參數(shù)都是些什么,可以調(diào)用這個方法另凌,且無參數(shù)谱轨,這將會返回下面的設(shè)置:

sns.axes_style()

{'axes.facecolor': 'white',
 'axes.edgecolor': '.8',
 'axes.grid': True,
 'axes.axisbelow': True,
 'axes.labelcolor': '.15',
 'figure.facecolor': 'white',
 'grid.color': '.8',
 'grid.linestyle': '-',
 'text.color': '.15',
 'xtick.color': '.15',
 'ytick.color': '.15',
 'xtick.direction': 'out',
 'ytick.direction': 'out',
 'lines.solid_capstyle': 'round',
 'patch.edgecolor': 'w',
 'image.cmap': 'rocket',
 'font.family': ['sans-serif'],
 'font.sans-serif': ['Arial',
  'DejaVu Sans',
  'Liberation Sans',
  'Bitstream Vera Sans',
  'sans-serif'],
 'patch.force_edgecolor': True,
 'xtick.bottom': False,
 'xtick.top': False,
 'ytick.left': False,
 'ytick.right': False,
 'axes.spines.left': True,
 'axes.spines.bottom': True,
 'axes.spines.right': True,
 'axes.spines.top': True}

然后,就可以設(shè)置這些參數(shù)的不同版本了吠谢。

sns.set_style("darkgrid",{'axes.facecolor':"0.9"})
sinplot()
seaborn11.png

繪圖元素比例

我們可以通過一套參數(shù)控制繪圖元素的比例
首先土童,我們通過set()方法重置默認的參數(shù)

sns.set()

有四個預(yù)置的環(huán)境,按大小從小到大排列分別為:paper, notebook, talk, poster工坊。其中献汗,notebook是默認的。

sns.set_context('paper')
sinplot()
seaborn12.png
sns.set_context('talk')
sinplot()
seaborn13.png
sns.set_context('poster')
sinplot()
seaborn14.png

我們可以通過set_context()方法設(shè)置相關(guān)參數(shù)王污,并且你可以通過提供一個字典參數(shù)值來覆蓋參數(shù)罢吃。當改變環(huán)境時,你也可以獨立的去縮放字體元素的大小昭齐。

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

同樣也可以通過with語句控制繪圖的比例

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末尿招,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子司浪,更是在濱河造成了極大的恐慌泊业,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件啊易,死亡現(xiàn)場離奇詭異吁伺,居然都是意外死亡,警方通過查閱死者的電腦和手機租谈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門篮奄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人割去,你說我怎么就攤上這事窟却。” “怎么了呻逆?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵夸赫,是天一觀的道長。 經(jīng)常有香客問我咖城,道長茬腿,這世上最難降的妖魔是什么呼奢? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮切平,結(jié)果婚禮上握础,老公的妹妹穿的比我還像新娘。我一直安慰自己悴品,他們只是感情好禀综,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著苔严,像睡著了一般定枷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上邦蜜,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天依鸥,我揣著相機與錄音,去河邊找鬼悼沈。 笑死贱迟,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的絮供。 我是一名探鬼主播衣吠,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼壤靶!你這毒婦竟也來了缚俏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤贮乳,失蹤者是張志新(化名)和其女友劉穎忧换,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體向拆,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡亚茬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了浓恳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片刹缝。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖颈将,靈堂內(nèi)的尸體忽然破棺而出梢夯,到底是詐尸還是另有隱情,我是刑警寧澤晴圾,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布颂砸,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏沾凄。R本人自食惡果不足惜梗醇,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撒蟀。 院中可真熱鬧,春花似錦温鸽、人聲如沸保屯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽姑尺。三九已至,卻和暖如春蝠猬,著一層夾襖步出監(jiān)牢的瞬間切蟋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工榆芦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留柄粹,地道東北人。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓匆绣,卻偏偏與公主長得像驻右,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子崎淳,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容