<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
安裝:
pip install seaborn
匯入:
import seaborn as sns
正式開始之前我們先用如下程式碼準備一組資料,方便展示使用。
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns pd.set_option('display.unicode.east_asian_width', True) df1 = pd.DataFrame( {'資料序號': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12], '廠商編號': ['001', '001', '001', '002', '002', '002', '003', '003', '003', '004', '004', '004'], '產品型別': ['AAA', 'BBB', 'CCC', 'AAA', 'BBB', 'CCC', 'AAA', 'BBB', 'CCC', 'AAA', 'BBB', 'CCC'], 'A屬性值': [40, 70, 60, 75, 90, 82, 73, 99, 125, 105, 137, 120], 'B屬性值': [24, 36, 52, 32, 49, 68, 77, 90, 74, 88, 98, 99], 'C屬性值': [30, 36, 55, 46, 68, 77, 72, 89, 99, 90, 115, 101] } ) print(df1)
生成一組資料如下:
設定風格使用的是sns.set_style()方法,且這裡內建的風格,是用背景色表示名字的,但是實際內容不限於背景色。
sns.set_style()
可以選擇的背景風格有:
sns.set()
sns.set_style(“darkgrid”)
sns.set_style(“whitegrid”)
sns.set_style(“dark”)
sns.set_style(“white”)
sns.set_style(“ticks”)
其中sns.set()表示使用自定義樣式,如果沒有傳入引數,則預設表示灰色網格背景風格。如果沒有set()也沒有set_style(),則為白色背景。
一個可能的bug:使用relplot()方法繪製出的影象,"ticks"樣式無效。
seaborn庫是基於matplotlib庫而封裝的,其封裝好的風格可以更加方便我們的繪圖工作。而matplotlib庫常用的語句,在使用seaborn庫時也依然有效。
關於設定其他風格相關的屬性,如字型,這裡有一個細節需要注意的是,這些程式碼必須寫在sns.set_style()的後方才有效。如將字型設定為黑體(避免中文亂碼)的程式碼:
plt.rcParams[‘font.sans-serif’] = [‘SimHei’]
如果在其後方設定風格,則設定好的字型會設定的風格覆蓋,從而產生警告。其他屬性也同理。
sns.despine()方法
# 移除頂部和右部邊框,只保留左邊框和下邊框 sns.despine() # 使兩個座標軸相隔一段距離(以10長度為例) sns.despine(offet=10,trim=True) # 移除左邊框 sns.despine(left=True) # 移除指定邊框 (以只保留底部邊框為例) sns.despine(fig=None, ax=None, top=True, right=True, left=True, bottom=False, offset=None, trim=False)
使用seaborn庫 繪製散點圖,可以使用replot()方法,也可以使用scatter()方法。
replot方法的引數kind預設是’scatter’,表示繪製散點圖。
hue參數列示 在該一維度上,用顏色區分
①對A屬性值和資料序號繪製散點圖,紅色散點,灰色網格,保留左、下邊框
sns.set_style(‘darkgrid') plt.rcParams[‘font.sans-serif'] = [‘SimHei'] sns.relplot(x=‘資料序號', y=‘A屬性值', data=df1, color=‘red') plt.show()
②對A屬性值和資料序號繪製散點圖,散點根據產品型別的不同顯示不同的顏色,
白色網格,左、下邊框:
sns.set_style(‘whitegrid') plt.rcParams[‘font.sans-serif'] = [‘SimHei'] sns.relplot(x=‘資料序號', y=‘A屬性值', hue=‘產品型別', data=df1) plt.show()
③將A屬性、B屬性、C屬性三個欄位的值用不同的樣式繪製在同一張圖上(繪製散點圖),x軸資料是[0,2,4,6,8…]
ticks風格(四個方向的框線都要),字型使用楷體
sns.set_style(‘ticks') plt.rcParams[‘font.sans-serif'] = [‘STKAITI'] df2 = df1.copy() df2.index = list(range(0, len(df2)*2, 2)) dfs = [df2[‘A屬性值'], df2[‘B屬性值'], df2[‘C屬性值']] sns.scatterplot(data=dfs) plt.show()
使用seaborn庫繪製折線圖, 可以使用replot()方法,也可以使用lineplot()方法。
sns.replot()預設繪製的是散點圖,繪製折線圖只需吧引數kind改為"line"。
①需求:繪製A屬性值與資料序號的折線圖,
灰色網格,全域性字型為楷體;並調整標題、兩軸標籤 的字型大小,
以及座標系與畫布邊緣的距離(設定該距離是因為字型沒有顯示完全):
sns.set(rc={‘font.sans-serif': 「STKAITI」}) sns.relplot(x=‘資料序號', y=‘A屬性值', data=df1, color=‘purple', kind=‘line') plt.title(「繪製折線圖」, fontsize=18) plt.xlabel(‘num', fontsize=18) plt.ylabel(‘A屬性值', fontsize=16) plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.9) plt.show()
②需求:繪製不同產品型別的A屬性折線(三條線一張圖),whitegrid風格,字型楷體。
sns.set_style(「whitegrid」) plt.rcParams[‘font.sans-serif'] = [‘STKAITI'] sns.relplot(x=‘資料序號', y=‘A屬性值', hue=‘產品型別', data=df1, kind=‘line') plt.title(「繪製折線圖」, fontsize=18) plt.xlabel(‘num', fontsize=18) plt.ylabel(‘A屬性值', fontsize=16) plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.9) plt.show()
③需求:將A屬性、B屬性、C屬性三個欄位的值用不同的樣式繪製在同一張圖上(繪製折線圖),x軸資料是[0,2,4,6,8…]
darkgrid風格(四個方向的框線都要),字型使用楷體,並加入x軸標籤,y軸標籤和標題。邊緣距離合適。
sns.set_style(‘darkgrid') plt.rcParams[‘font.sans-serif'] = [‘STKAITI'] df2 = df1.copy() df2.index = list(range(0, len(df2)*2, 2)) dfs = [df2[‘A屬性值'], df2[‘B屬性值'], df2[‘C屬性值']] sns.relplot(data=dfs, kind=「line」) plt.title(「繪製折線圖」, fontsize=18) plt.xlabel(‘num', fontsize=18) plt.ylabel(‘A屬性值', fontsize=16) plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.9) plt.show()
③多重子圖
橫向多重子圖 col
sns.set_style(‘darkgrid') plt.rcParams[‘font.sans-serif'] = [‘STKAITI'] sns.relplot(data=df1, x=「A屬性值」, y=「B屬性值」, kind=「line」, col=「廠商編號」) plt.subplots_adjust(left=0.05, right=0.95, bottom=0.1, top=0.9) plt.show()
縱向多重子圖 row
sns.set_style(‘darkgrid') plt.rcParams[‘font.sans-serif'] = [‘STKAITI'] sns.relplot(data=df1, x=「A屬性值」, y=「B屬性值」, kind=「line」, row=「廠商編號」) plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.95) plt.show()
使用lineplot()方法繪製折線圖,其他細節基本同上,範例程式碼如下:
sns.set_style(‘darkgrid') plt.rcParams[‘font.sans-serif'] = [‘STKAITI'] sns.lineplot(x=‘資料序號', y=‘A屬性值', data=df1, color=‘purple') plt.title(「繪製折線圖」, fontsize=18) plt.xlabel(‘num', fontsize=18) plt.ylabel(‘A屬性值', fontsize=16) plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.9) plt.show()
sns.set_style(‘darkgrid') plt.rcParams[‘font.sans-serif'] = [‘STKAITI'] df2 = df1.copy() df2.index = list(range(0, len(df2)*2, 2)) dfs = [df2[‘A屬性值'], df2[‘B屬性值'], df2[‘C屬性值']] sns.lineplot(data=dfs) plt.title(「繪製折線圖」, fontsize=18) plt.xlabel(‘num', fontsize=18) plt.ylabel(‘A屬性值', fontsize=16) plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.9) plt.show()
繪製直方圖使用的是sns.displot()方法
sns.set_style(‘darkgrid') plt.rcParams[‘font.sans-serif'] = [‘STKAITI'] sns.displot(data=df1[[‘C屬性值']], bins=6, rug=True, kde=True) plt.title(「直方圖」, fontsize=18) plt.xlabel(‘C屬性值', fontsize=18) plt.ylabel(‘數量', fontsize=16) plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.9) plt.show()
隨機生成300個正態分佈資料,並繪製直方圖,顯示核密度曲線
sns.set_style(‘darkgrid') plt.rcParams[‘font.sans-serif'] = [‘STKAITI'] np.random.seed(13) Y = np.random.randn(300) sns.displot(Y, bins=9, rug=True, kde=True) plt.title(「直方圖」, fontsize=18) plt.xlabel(‘C屬性值', fontsize=18) plt.ylabel(‘數量', fontsize=16) plt.subplots_adjust(left=0.15, right=0.9, bottom=0.1, top=0.9) plt.show()
繪製條形圖使用的是barplot()方法
以產品型別 欄位資料作為x軸資料,A屬性值資料作為y軸資料。按照廠商編號欄位的不同進行分類。
具體如下:
sns.set_style(‘darkgrid') plt.rcParams[‘font.sans-serif'] = [‘STKAITI'] sns.barplot(x=「產品型別」, y=‘A屬性值', hue=「廠商編號」, data=df1) plt.title(「條形圖」, fontsize=18) plt.xlabel(‘產品型別', fontsize=18) plt.ylabel(‘數量', fontsize=16) plt.subplots_adjust(left=0.15, right=0.9, bottom=0.15, top=0.9) plt.show()
繪製線性迴歸模型使用的是lmplot()方法。
主要的引數為x, y, data。分別表示x軸資料、y軸資料和資料集資料。
除此之外,同上述所講,還可以通過hue指定分類的變數;
通過col指定列分類變數,以繪製 橫向多重子圖;
通過row指定行分類變數,以繪製 縱向多重子圖;
通過col_wrap控制每行子圖的數量;
通過size可以控制子圖的高度;
通過markers可以控制點的形狀。
下邊對 X屬性值 和 Y屬性值 做線性迴歸,程式碼如下:
sns.set_style(‘darkgrid') plt.rcParams[‘font.sans-serif'] = [‘STKAITI'] sns.lmplot(x=「A屬性值」, y=‘B屬性值', data=df1) plt.title(「線性迴歸模型」, fontsize=18) plt.xlabel(‘A屬性值', fontsize=18) plt.ylabel(‘B屬性值', fontsize=16) plt.subplots_adjust(left=0.15, right=0.9, bottom=0.15, top=0.9) plt.show()
繪製和密度圖,可以讓我們更直觀地看出樣本資料的分佈特徵。繪製核密度圖使用的方法是kdeplot()方法。
對A屬性值和B屬性值繪製核密度圖,
將shade設定為True可以顯示包圍的陰影,否則只有線條。
sns.set_style(‘darkgrid') plt.rcParams[‘font.sans-serif'] = [‘STKAITI'] sns.kdeplot(df1[「A屬性值」], shade=True, data=df1, color=‘r') sns.kdeplot(df1[「B屬性值」], shade=True, data=df1, color=‘g') plt.title(「核密度圖」, fontsize=18) plt.xlabel(‘Value', fontsize=18) plt.subplots_adjust(left=0.15, right=0.9, bottom=0.15, top=0.9) plt.show()
繪製邊際核密度圖時使用的是sns.jointplot()方法。引數kind應為"kde"。使用該方法時,預設使用的是dark樣式。且不建議手動新增其他樣式,否則可能使影象無法正常顯示。
plt.rcParams[‘font.sans-serif'] = [‘STKAITI'] sns.jointplot(x=df1[「A屬性值」], y=df1[「B屬性值」], kind=「kde」, space=0) plt.show()
繪製箱線圖使用到的是boxplot()方法。
基本的引數有x, y, data。
除此之外 還可以有
hue 表示分類欄位
width 可以調節箱體的寬度
notch 表示中間箱體是否顯示缺口,預設False不顯示。
鑑於前邊的資料資料量不太夠不便展示,這裡再生成一組資料:
np.random.seed(13) Y = np.random.randint(20, 150, 360) df2 = pd.DataFrame( {‘廠商編號': [‘001', ‘001', ‘001', ‘002', ‘002', ‘002', ‘003', ‘003', ‘003', ‘004', ‘004', ‘004'] * 30, ‘產品型別': [‘AAA', ‘BBB', ‘CCC', ‘AAA', ‘BBB', ‘CCC', ‘AAA', ‘BBB', ‘CCC', ‘AAA', ‘BBB', ‘CCC'] * 30, ‘XXX屬性值': Y } )
生成好後,開始繪製箱線圖:
plt.rcParams[‘font.sans-serif'] = [‘STKAITI'] sns.boxplot(x=‘產品型別', y=‘XXX屬性值', data=df2) plt.show()
交換x、y軸資料後:
plt.rcParams[‘font.sans-serif'] = [‘STKAITI'] sns.boxplot(y=‘產品型別', x=‘XXX屬性值', data=df2) plt.show()
可以看到箱線圖的方向也隨之改變
將廠商編號作為分類欄位:
plt.rcParams[‘font.sans-serif'] = [‘STKAITI'] sns.boxplot(x=‘產品型別', y=‘XXX屬性值', data=df2, hue=「廠商編號」) plt.show()
提琴圖結合了箱線圖和核密度圖的特徵,用於展示資料的分佈形狀。
使用violinplot()方法繪製提琴圖。
plt.rcParams[‘font.sans-serif'] = [‘STKAITI'] sns.violinplot(x=‘產品型別', y=‘XXX屬性值', data=df2) plt.show()
plt.rcParams[‘font.sans-serif'] = [‘STKAITI'] sns.violinplot(x=‘XXX屬性值', y=‘產品型別', data=df2) plt.show()
plt.rcParams[‘font.sans-serif'] = [‘STKAITI'] sns.violinplot(x=‘產品型別', y=‘XXX屬性值', data=df2, hue=「廠商編號」) plt.show()
以雙色球中獎號碼資料為例繪製熱力圖,這裡資料採用亂數生成。
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns sns.set() plt.figure(figsize=(6,6)) plt.rcParams[‘font.sans-serif'] = [‘STKAITI'] s1 = np.random.randint(0, 200, 33) s2 = np.random.randint(0, 200, 33) s3 = np.random.randint(0, 200, 33) s4 = np.random.randint(0, 200, 33) s5 = np.random.randint(0, 200, 33) s6 = np.random.randint(0, 200, 33) s7 = np.random.randint(0, 200, 33) data = pd.DataFrame( {‘一': s1, ‘二': s2, ‘三': s3, ‘四':s4, ‘五':s5, ‘六':s6, ‘七':s7 } ) plt.title(‘雙色球熱力圖') sns.heatmap(data, annot=True, fmt=‘d', lw=0.5) plt.xlabel(‘中獎號碼位數') plt.ylabel(‘雙色球數位') x = [‘第1位', ‘第2位', ‘第3位', ‘第4位元', ‘第5位', ‘第6位', ‘第7位'] plt.xticks(range(0, 7, 1), x, ha=‘left') plt.show()
到此這篇關於Python資料視覺化之Seaborn的使用詳解的文章就介紹到這了,更多相關Python Seaborn內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45