seaborn提供5中主題風格:windows
主要經過set()和set_style()兩個函數對總體風格進行控制。dom
準備工做:函數
import seaborn as sns import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt
# 定義一個繪圖函數 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)
輸入:字體
# 通常圖形, 默認設置 # 效果同sns.set() sinplot()
輸出:編碼
輸入:spa
# 默認設置 sns.set() # 使用seaborn的默認設置 sinplot()
輸出:.net
輸入:設計
# 設置風格爲ticks # 能夠直接經過參數名傳參,也能夠經過set_style()傳參 # 效果同:set_style('ticks') sns.set(style='ticks') sinplot()
輸出:3d
輸入:code
sns.set_style('whitegrid') sinplot()
輸出:
其餘主題設置風格相似,可經過set(style=" ")方式,也能夠經過set_style( " " )的方式設置。
具體可以使用print(help(sns.set))函數查看幫助文檔。
輸入:
# 邊框設置 sinplot() sns.despine() # 去掉邊框,默認去掉上邊框和右邊框
輸出:
也能夠經過參數名傳參,來決定哪一個邊框不顯示。
輸入:
# 也能夠經過參數名傳參,決定哪一個邊框不顯示 sinplot() sns.despine(bottom=True, right=True) # True表明不顯示
輸出:
輸入:
# 對子圖設置不一樣風格 with sns.axes_style('darkgrid'): plt.subplot(211) # 對第一個子圖設置風格darkgrid sinplot() plt.subplot(212) sinplot(2) # 經過關鍵字with,對不一樣子圖設置風格
輸出:
輸入:
# 對圖中內容進行設置,包括線條顏色,粗細和刻度等 sns.set_context("paper") # 使用paper風格 plt.figure(figsize=(10, 6)) sinplot()
輸出:
輸入:
# 設置字體大小,線寬等 sns.set_context("talk", font_scale=1.5, rc={'line.linewidth':2.5}) # 使用talk風格 plt.figure(figsize=(10, 6)) sinplot()
輸出:
seaborn主要提供分類色板、顏色空間、連續色板和xkcd等操做,對圖像顏色進行設置。
主要涉及如下函數:
import numpy as np import seaborn as sns import matplotlib.pyplot as plt sns.set(rc={'figure.figsize': (6, 6)}) # 設置畫板大小
輸入:
# 分類色板 current_palette = sns.color_palette() #默認是deep,深色風 sns.palplot(current_palette) sns.palplot(sns.color_palette("muted")) #柔和風 sns.palplot(sns.color_palette("pastel",9)) #粉蠟筆風 sns.palplot(sns.color_palette("bright",10)) #明亮風 sns.palplot(sns.color_palette("dark",11)) #黑暗風 sns.palplot(sns.color_palette("colorblind",12)) # 色盲風 # 6個默認的顏色循環主題: deep, muted, pastel, bright, dark, colorblind
輸出:
顏色空間主要經過hls_palette()函數來控制顏色的色調、亮度和飽和
輸入:
# hls_palette()函數對顏色進行設置 sns.palplot(sns.hls_palette(8,h=.8, l=.7, s=.9)) sns.palplot(sns.hls_palette(8,h=0.1, l=.3, s=.6)) #sns.hls_palette設置獲得HLS的色彩空間中的顏色,顏色個數, # h設置色調, # l設置亮度, # s設置飽和度, # 取值範圍均在(0,1)
輸出:
輸入:
# 設置成對的,相近顏色 sns.palplot(sns.color_palette("Paired",10)) # 按對分組,每一對之間屬同一色系中的差別較大的兩個顏色 # 對於對之間屬於不一樣色系的顏色
輸出:
xkcd包含了一套針對隨機RGB色的命名。產生了954個能夠經過xdcd_rgb字典中調用的命名顏色。
輸入:
# xkcd經過skcd_rgb設置顏色 plt.plot([0, 1], [3, 0], sns.xkcd_rgb["piss yellow"], lw=4) plt.plot([0, 1], [1, 1], sns.xkcd_rgb["cherry"], lw=3) plt.plot([0, 1], [0, 3], sns.xkcd_rgb["robin egg blue"], lw=3) # 經過顏色名字來調用顏色, # 也能夠經過顏色的16進制編碼調用顏色 # lw : linewidth設置
輸出:
輸入:
# xkcd 經過顏色名稱設置顏色 colors = ["windows blue", "amber", "greyish", "faded green", "dusty purple"] sns.palplot(sns.xkcd_palette(colors))
輸出:
色彩隨數據變換,好比數據愈來愈重要則顏色愈來愈深。
輸入:
# 設置漸變色 sns.palplot(sns.color_palette("Blues")) #設置某種顏色的一系列漸變色 sns.palplot(sns.color_palette("Blues_r",8)) # blues_r 反向
輸出:
輸入:
# 設置light風格的漸變色 #使用函數light_palette函數,設置連續色板的風格 sns.palplot(sns.light_palette("green")) # 設置light風格的綠色漸變
輸出:
輸入:
# 設置dark風格的漸變色 # 使用dark_palette函數設置dark風格的漸變 sns.palplot(sns.dark_palette("purple")) # 設置dark風格的紫色
輸出:
輸入:
# 設置漸變的顏色排列順序 # reverse參數設置漸變的排列順序 sns.palplot(sns.light_palette("navy", reverse=True)) #reverse能夠設置顏色排列順序
輸出:
輸入:
# 漸變色簡單易用 # 生成一個多元正態分佈矩陣 # 參數mean : 均值 # 參數cov : 協方差, array類型 # 參數size: 個數 x, y = np.random.multivariate_normal(mean=[0, 0], cov=[[1, -.5], [-.5, 1]], size=300).T pal = sns.dark_palette("green",as_cmap=True) # as_cmap=True,返回一個colormap對象 sns.kdeplot(x, y, cmap=pal) # kdeplot : 核密度估計圖, # cmap=pal,以colormap方式來設置顏色
輸出:
import numpy as np import pandas as pd from scipy import stats, integrate import matplotlib.pyplot as plt import seaborn as sns
輸入:
# 頻數直方圖 # 生成100個成標準正態分佈的隨機數 x = np.random.normal(size=100) # sns.distplot畫頻數直方圖 # kde=True,進行核密度估計 sns.distplot(x,kde=True)
輸出:
輸入:
# 設置頻數直方圖的bins sns.distplot(x, bins=20, kde=False)
輸出:
輸入:
# 數據分佈狀況 # kde核密度估計, # fit擬合參數(黑色線條) # 藍色線條爲核密度估計線條 sns.distplot(x, kde=True, fit=stats.alpha)
輸出:
主要用一下幾個圖畫雙變量的分析圖:
# 構造數據 mean, cov = [0, 1], [(1, .5), (.5, 1)] # 二維多正態分數的數據 data = np.random.multivariate_normal(mean, cov, 200) df = pd.DataFrame(data, columns=["x", "y"]) #將array結構轉換爲dataframe結構,添加列名。
輸入:
# 散點圖 # 通常用散點圖展現兩個變量間的關係 sns.jointplot(x='x', y='y', data=df, size=7) # x,y參數也能夠用x=df['x'], y=df['y'] 的形式傳入 # sns.jointplot畫雙變量關係圖, # data傳入dataframe,x,y設置兩個變量數據, # size設置圖的大小
輸出:
輸入:
# 六角圖 # 數據 x, y = np.random.multivariate_normal(mean, cov, 1000).T # 設置畫圖風格 with sns.axes_style("white"): sns.jointplot(x=x, y=y, kind="hex", color="k", size = 7) # kind='hex' 畫出六角圖 # 六角圖中顏色越深的區域表示該區域的點越密集,數據越多
輸出:
輸入:
# pairplot函數 # 分析多個變量間,每兩個變量間的關係 # 不一樣變量間用散點圖表示 # 同一變量用直方圖表示 # 內置數據集:鳶尾花的數據集 iris = sns.load_dataset("iris") # print (iris.head()) sns.pairplot(iris)
輸出:
# 數據導入 import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt import seaborn as sns sns.set(color_codes=True) # 內置數據集tips小費 tips = sns.load_dataset("tips") tips.head()
輸入:
# 兩變量畫迴歸關係圖(regplot函數) # regplot()和lmplot()均可以繪製迴歸關係,推薦regplot() plt.figure(figsize = (7,7)) sns.regplot(x="total_bill", y="tip", data=tips) # sns.regplot畫數據散點和線性擬合的圖, # 設置x座標,y座標,data傳入dataframe
輸出:
輸入:
# 兩變量畫迴歸關係圖(lmplot函數) sns.lmplot(x="total_bill", y="tip", data=tips,size = 7)
輸出:
輸入:
# 設置橫向抖動 # x_jitter參數設置點橫向抖動量。 sns.regplot(x="size", y="tip", data=tips, x_jitter=.05) # 部分數據重疊,所以設置抖動,減小覆蓋點,便於觀察點的分佈
輸出:
# 數據讀取 import numpy as np import pandas as pd import matplotlib as mpl import matplotlib.pyplot as plt import seaborn as sns # 設置風格 sns.set(style="whitegrid") # 數據加載 titanic = sns.load_dataset("titanic") tips = sns.load_dataset("tips") iris = sns.load_dataset("iris")
輸入:
# 分類散點圖(兩變量:day,total_bill) # sns.stripplot()和sns.swarmplot()均能實現分類散點圖 plt.figure(figsize=(10,6)) # 圖型基本設置 plt.xticks(size=12) plt.yticks(size=12) plt.xlabel('day',size=16) plt.ylabel( 'total_bill',size=16) # 分析day與total_bill間的關係 sns.stripplot(x="day", y="total_bill", data=tips)
輸出:
數據重疊嚴重,影響觀察數據的量,所以設置抖動。
輸入:
# 數據重疊嚴重,影響觀察數據的量,所以設置抖動 # jitter=True sns.stripplot(x="day", y="total_bill", data=tips, jitter=True)
輸出:
輸入:
# swarmplot函數實現類別散點圖 sns.swarmplot(x="day", y="total_bill", data=tips)
輸出:
輸入:
# 分類散點圖(三變量:day, total_bill, sex) # 傳入的第三個變量,經過顏色區分 plt.figure(figsize=(10,6)) palette1=sns.color_palette("bright") # hue設置第三個變量,palette設置調色板顏色 sns.swarmplot(x="day", y="total_bill", hue="sex",palette = palette1,data=tips)
輸出:
輸入:
# 分類散點圖(三變量:day, total_bill, time) plt.figure(figsize=(10,6)) # hue接收第三個變量 sns.swarmplot(x="total_bill", y="day", hue="time", data=tips)
輸出:
盒圖是顯示數據離散度的一種圖形。它對於顯示數據的離散的分佈狀況效果不錯。
IQR = Q3-Q1,即上四分位數與下四分位數之間的差,也就是盒子的長度。
N = 1.5IQR 若是一個值>Q3+N或 < Q1-N,則爲離羣點
盒圖特色:
經過盒圖,在分析數據的時候,盒圖可以有效地幫助咱們識別數據的特徵:
直觀地識別數據集中的異常值(查看離羣點)。
判斷數據集的數據離散程度和偏向(觀察盒子的長度,上下隔間的形狀,以及鬍鬚的長度)。
輸入:
# 盒圖(三變量:day,total_bill, time) # sns.boxplot() # 盒圖是顯示數據離散度的一種圖形。它對於顯示數據的離散的分佈狀況效果不錯。 # IQR = Q3-Q1,即上四分位數與下四分位數之間的差,也就是盒子的長度。 # N = 1.5IQR 若是一個值>Q3+N或 < Q1-N,則爲離羣點 # 盒圖特色: # 經過盒圖,在分析數據的時候,盒圖可以有效地幫助咱們識別數據的特徵: # 直觀地識別數據集中的異常值(查看離羣點)。 # 判斷數據集的數據離散程度和偏向(觀察盒子的長度,上下隔間的形狀,以及鬍鬚的長度)。 # 基本設置 plt.figure(figsize=(10,6)) plt.xticks(size=12) plt.yticks(size=12) plt.xlabel('day',size=16) plt.ylabel( 'total_bill',size=16) sns.boxplot(x="day", y="total_bill", hue="time", data=tips)
輸出:
輸入:
# 小提琴圖(三變量:day, total_bill, time) # sns.violinplot()函數實現 plt.figure(figsize=(10,6)) plt.xticks(size=12) plt.yticks(size=12) plt.xlabel('total_bill',size=16) plt.ylabel( 'day',size=16) # sns.violinplot()畫小提琴圖 sns.violinplot(x="total_bill", y="day", hue="time", data=tips) # 圖中白點是中位數, # 中間黑色盒形是上四分位點和下四分位點, # 黑色的線條表示離羣點的離羣程度,越長表示離羣點越遠 plt.show()
輸出:
輸入:
# 小提琴圖設置(三變量:day, total_bill, sex) # split設置左右區分 sns.violinplot(x="day", y="total_bill", hue="sex", data=tips, split=True) plt.show()
輸出:
輸入:
# 小提琴圖和分類散點圖組合 # 基本設置 plt.figure(figsize=(10,6)) plt.xticks(size=12) plt.yticks(size=12) plt.xlabel('total_bill',size=16) plt.ylabel( 'day',size=16) # inner設置是否顯示中間的盒形和線條 sns.violinplot(x="day", y="total_bill", data=tips, inner=None) # alpha設置透明度 sns.swarmplot(x="day", y="total_bill", data=tips, color="w", alpha=.6) plt.show()
輸出:
輸入:
# 平均數條形圖(三變量:sex, survived, class) # sns.barplot()函數實現平均數條形圖 # 基本設置 plt.figure(figsize=(10,6)) plt.xticks(size=12) plt.yticks(size=12) plt.xlabel('sex',size=16) plt.ylabel( 'survived',size=16) sns.barplot(x="sex", y="survived", hue="class", data=titanic,ci=95) #黑色線條表示置信度, # ci 設置黑色線條的大小,範圍在[0,100] plt.show()
輸出:
輸入:
# 點圖(三變量:sex, survived, class) # sns.pointplot()繪製點圖 plt.figure(figsize=(10,6)) plt.xticks(size=12) plt.yticks(size=12) plt.xlabel('sex',size=16) plt.ylabel( 'survived',size=16) # 反映變化趨勢 sns.pointplot(x="sex", y="survived", hue="class", data=titanic,ci=70) # ci=70 設置執行度 plt.show()
輸出:
輸入:
# 點圖細節設置 sns.pointplot(x="class", y="survived", hue="sex", data=titanic, palette={"male": "g", "female": "m"}, markers=["^", "o"], linestyles=["-", "--"], scale=1.5) # palette 經過調色板來設置顏色, # markers設置點的形狀, # linestyles設置顯的風格, # scale設置線條的粗細 plt.show()
輸出:
輸入:
# 多層面板分類圖 # sns.factorplot() 實現多層面板分類圖 # x,y,hue設置要畫在一個圖中的數據集變量名 sns.factorplot(x="class", y="survived", hue="sex", data=titanic, size=6,ci=50) plt.show()
輸出:
輸入:
# 經過kind參數指定圖的類型 sns.factorplot(x="day", y="total_bill", hue="smoker", data=tips, kind="bar", size=6) plt.show()
輸出:
輸入:
# 四個變量下的分類散點圖 # kind參數指定圖類型 # loc參數接收第四個參數 sns.factorplot(x="day", y="total_bill", hue="smoker",col="time", data=tips, kind="swarm", size=6) # 共四個變量了 # col和row設置更多的變量名,進行平鋪顯示(以不一樣的圖進行區分) plt.show()
輸出:
輸入:
# 四變量下的盒圖 sns.factorplot(x="time", y="total_bill", hue="smoker", col="day", data=tips, kind="box", size=6, aspect=1,col_wrap=2) plt.show()
輸出:
Parameters:
# 讀取數據 import numpy as np import pandas as pd import seaborn as sns from scipy import stats import matplotlib as mpl import matplotlib.pyplot as plt sns.set(style="ticks") tips = sns.load_dataset("tips") # tips.head()
輸入:
# FacetGrid()繪製頻數直方圖 # sns.FacetGrid,以網格圖的方式呈現多變量的關係 # 傳入的數據集「tips」 # 指定第四個變量「time」 g = sns.FacetGrid(tips, col="time", size=6) # 建立畫板 # 繪製「tips」的頻數直方圖 g.map(plt.hist, "tip",edgecolor="white")
輸出:
輸入:
# FacetGrid()繪製散點圖 # 建立畫板及變量 g = sns.FacetGrid(tips, col="sex", hue="smoker",size=6) g.map(plt.scatter, "total_bill", "tip", alpha=.7) #添加圖例 g.add_legend() plt.show()
輸出:
輸入:
# FacetGrid()繪製迴歸關係圖 # margin_titles是否顯示邊緣的標題 g = sns.FacetGrid(tips, row="smoker", col="time", margin_titles=True) #fit_reg是否顯示擬合曲線 g.map(sns.regplot, "size", "total_bill", color="g", fit_reg=False, x_jitter=.1) plt.show()
輸出:
輸入:
# FacetGrid()繪製bar圖 g = sns.FacetGrid(tips, col="day", size=4, aspect=.5) # aspect設置長寬比 g.map(sns.barplot, "sex", "total_bill") plt.show()
輸出:
輸入:
# 指定畫圖順序 from pandas import Categorical # 獲取數據的索引 ordered_days = tips.day.value_counts().index print (ordered_days) # Categorical指定順序,裏面傳入自定義順序 ordered_days = Categorical(['Thur', 'Fri', 'Sat', 'Sun']) # row_order=ordered_days設置順序 g = sns.FacetGrid(tips, row="day", row_order=ordered_days, size=1.7, aspect=4,) g.map(sns.boxplot, "total_bill") plt.show()
輸出:
輸入:
# FacetGrid()繪製散點圖 pal = dict(Lunch="seagreen", Dinner="gray") g = sns.FacetGrid(tips, hue="time", palette=pal, size=5) # s設置點的大小, # edgecolor設置點邊緣的顏色 g.map(plt.scatter, "total_bill", "tip", s=50, alpha=.7, linewidth=2, edgecolor="r") # 添加圖例 g.add_legend() plt.show()
輸出:
散點圖細節設置:
輸入:
# 散點圖細節設置1 # palette 設置顏色 # hue_kws指定線型 g = sns.FacetGrid(tips, hue="sex", palette="Set1", size=5, hue_kws={"marker": ["^", "v"]}) g.map(plt.scatter, "total_bill", "tip", s=100, linewidth=.5, edgecolor="white") g.add_legend() plt.show()
輸出:
輸入:
# 散點圖細節設置2 # 涉及到了四個變量, # tips、totall bill、smoker和sex, # 使用row和col的兩個變量進行平鋪區分顯示 with sns.axes_style("white"): g = sns.FacetGrid(tips, row="sex", col="smoker", margin_titles=True, size=5) # 設置座標軸的標題,傳入XY軸的標題,字符串形式 g.map(plt.scatter, "total_bill", "tip", color="#334488", edgecolor="white", lw=.5); # 設置標籤 g.set_axis_labels("Total bill (US Dollars)", "Tip") # 設置座標軸刻度 g.set(xticks=[10, 30, 50], yticks=[2, 6, 10]) #設置子圖之間的間距 g.fig.subplots_adjust(wspace=.02, hspace=.02)
輸出:
輸入:
# PairGrid()畫多變量間散點圖 # 讀取數據 iris = sns.load_dataset("iris") # 指定畫板,傳入數據 g = sns.PairGrid(iris) # map畫圖 g.map(plt.scatter) plt.show()
輸出:
輸入:
# PairGrid()細節設置 g = sns.PairGrid(iris) # 設置對角線上的圖的類型 g.map_diag(plt.hist) # 設置非對角線上圖的類型 g.map_offdiag(plt.scatter) plt.show()
輸出:
輸入:
# 添加變量species g = sns.PairGrid(iris, hue="species") g.map_diag(plt.hist) g.map_offdiag(plt.scatter) g.add_legend()#添加圖例 plt.show()
輸出:
輸入:
# 設置要畫的指標 # 經過vars指定要畫的指標 g = sns.PairGrid(iris, vars=["sepal_length", "sepal_width"], hue="species") g.map(plt.scatter) g.add_legend() plt.show()
輸出:
輸入:
# 顏色控制 # palette 使用調色板來設置顏色 g = sns.PairGrid(tips, hue="size", palette="GnBu_d",size = 4) g.map(plt.scatter, s=70, edgecolor="white") g.add_legend() plt.show()
輸出:
# 數據讀取 import matplotlib.pyplot as plt import numpy as np; np.random.seed(0) import seaborn as sns; sns.set()
輸入:
# 熱度圖 uniform_data = np.random.rand(3, 3) # print (uniform_data) heatmap = sns.heatmap(uniform_data) # 經過顏色的變化反映數字大小
輸出:
輸入:
# vmix,vmax設置bar兩端 # 設置bar的兩端 ax = sns.heatmap(uniform_data, vmin=0.2, vmax=0.5) # 大於0.5定爲淡色,小於0.2就定爲黑色
輸出:
輸入:
# center設置中間數 # center = 0 # 大於0屬於一種色系 # 小於0屬於另外一種色系 normal_data = np.random.randn(3, 3) # print (normal_data) ax = sns.heatmap(normal_data, center=0)
輸出:
輸入:
# pivot()重塑數據 # 數據讀取 flights = sns.load_dataset("flights") # flights.head() # pivot重塑數據,產生一個「pivot」表格,造成dataframe結果 flights1 = flights.pivot("month", "year", "passengers") # print (flights1) plt.figure(figsize=(10,8)) ax = sns.heatmap(flights1)
輸出:
輸入:
# 添加數值 plt.figure(figsize=(10,8)) # annot顯示註釋, # fmt設置註釋的形式 ax = sns.heatmap(flights1, annot=True,fmt="d") # fmt='d': 十進制的整數顯示 # fmt='f' : float小數 # fmt='e': 科學計數法
輸出:
輸入:
# 設置間距 plt.figure(figsize=(10,8)) # linewidths設置色塊之間的間距 ax = sns.heatmap(flights1, linewidths=1)
輸出:
輸入:
# 設置顏色 plt.figure(figsize=(10,8)) ax = sns.heatmap(flights1, cmap="YlGnBu") # cmap設置顏色。
輸出:
輸入:
# 設置bar的顯示與否 plt.figure(figsize=(8,8)) #cbar設置colorbar是否顯示 ax = sns.heatmap(flights1, cbar=False)
輸出: