Seaborn的底層是基于Matplotlib的,他們的差異有點像在點餐時選套餐還是自己點的區(qū)別,Matplotlib是獨立點菜,可能費時費心(尤其是對我這種選擇困難癥患者…)但最后上桌的菜全是特別適合自己的;而Seaborn是點套餐,特別簡單,一切都是配好的,雖然省時省心,但可能套餐里總有些菜是不那么合自己口味的。接下來詳細(xì)說一下:
Seaborn是用戶把自己常用到的可視化繪圖過程進行了函數(shù)封裝,形成的一個“快捷方式”,他相比Matplotlib的好處是代碼更簡潔,可以用一行代碼實現(xiàn)一個清晰好看的可視化輸出。主要的缺點則是定制化能力會比較差,只能實現(xiàn)固化的一些可視化模板類型;
而Matplotlib是可以實現(xiàn)高度定制化繪圖的,高度定制化可以讓你獲得最符合心意的可視化輸出結(jié)果,但也因此需要設(shè)置更多的參數(shù),因而代碼更加復(fù)雜一些。
兩者相互補充,Seaborn,一般來說基本是夠用的,而且特別容易上手;但很多時候Seaborn輸出的結(jié)果確實可能不如人意,這時候需要結(jié)合Matplotlib做些修改,就需要深入學(xué)習(xí)下Matplotlib。
此處僅僅是快速回顧Matplotlib的相關(guān)概念,之前忘記的小伙伴可以查看數(shù)據(jù)分析可視化課程的第三章matplotlib相關(guān)內(nèi)容
import pandas as pdimport matplotlib.pyplot as pltimport random# maplotlib快速回顧# 列表推導(dǎo)式plt.rcParams['font.sans-serif'] = ['SimHei']x_val = [str(i) + '月' for i in range(1,12)]y_val = [random.randint(1,10) for i in range(1,12)]# 顯示分類圖則 color與label顯得有意義plt.scatter(x_val,y_val,color='red',label='我是標(biāo)簽')plt.legend(title='分類標(biāo)題')plt.xlabel('月份')plt.ylabel('銷量')plt.title('Matplotlib快速回顧')plt.show()
from sklearn.datasets import load_iris# 可以通過網(wǎng)絡(luò)獲取數(shù)據(jù)集,控制臺有csv的存儲地址data = load_iris()print(data)iris = pd.read_csv("../data/iris.csv")print(iris.head())print(iris['Type'].unique())colors = dict(zip(iris['Type'].unique(),['blue','green','red']))for index,group in iris.groupby('Type'): # print(group) plt.scatter(group['PetalLength'],group['SepalLength'],color=colors[index],label=index) plt.legend(title='type') plt.xlabel('petalLength') plt.ylabel('sepalLength')plt.show()
Matplotlib效果圖如下
import seaborn as snssns.lmplot('PetalLength','SepalLength',iris,hue='Type',fit_reg=False)plt.show()
SeaBorn效果圖如下
# Series天生與可視化無縫轉(zhuǎn)化s1= pd.Series(data=np.random.normal(loc=5,scale=1,size=100))# sns.kdeplot(s1,color='#ff0000')sns.kdeplot(s1,color='#ff0000',shade=True, vertical=True)s2= pd.Series(data=np.random.normal(loc=5,scale=4,size=100))# cmap: 顏色方案,直接配置#FF000會拋出異常,在控制臺會打印正確的值sns.kdeplot(s1,s2,cmap='BrBG',shade=True)# 0,7,1版本支持: sns.plt.show()plt.show()
雙核密度估計圖
# 封裝了直方圖和核密度估計圖: rug: 控制是否畫樣本點sns.distplot(a=s1,hist=False,kde=True,rug=True,kde_kws={'shade':True},label='AAA')sns.distplot(a=s2,hist=False,kde=True,rug=True,kde_kws={'shade':True},label='BBB')plt.show()
密度估計圖(多圖)
# 查看源碼發(fā)現(xiàn)下載地址是github:https://github.com/mwaskom/seaborn-datadf = sns.load_dataset("flights")print(df.info())print(df.head(n=3))# 如果數(shù)據(jù)量大可以嘗試保存在本地df.to_csv('../data/flights.csv')# 采用透視表對數(shù)據(jù)結(jié)構(gòu)進行重新組裝df = df.pivot(index='month',columns='year',values='passengers')print(df)
sns.heatmap(df,annot=True,fmt='d',cmap='YlGnBu')plt.show()#可以通過柱狀圖顯示每年的乘客數(shù)量s = df.sum()print(s,type(s))sns.barplot(x=s.index,y=s.values)plt.show()
熱力圖顯示每年每月的旅客人數(shù)
sns.set_style("darkgrid",{'grid.color':'#00ff00'})# 返回樣式的屬性值for item in sns.axes_style().items(): print(item)# numpy 模擬等差數(shù)列x = np.linspace(0,10,100)y1 = np.sin(x)y2 = np.sin(x + 2) * 1.5sns.lineplot(x,y1)sns.lineplot(x,y2)plt.show()
修改樣式之后的效果如下
tips = sns.load_dataset("tips")tips.to_csv("../data/tips.csv")print(tips.head())# 分布散點圖 默認(rèn)會對x列進行分組操作 jitter: 是否支持抖動效果# sns.stripplot(x='day',y='total_bill',data=tips,jitter=True)# 分類散點圖 hue: 要分類的列,建議列值不能太多sns.swarmplot(x='day',y='total_bill',data=tips,hue='sex')plt.show()
分類散點圖效果
聯(lián)系客服