Seaborn庫(kù)的基本繪圖操作
#seaborn庫(kù)可視化模板
#導(dǎo)庫(kù)
from matplotlib import pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns
# 設(shè)置中文字體
sns.set_style('whitegrid', {'font.sans-serif':['simhei', 'Arial']})
# 忽略警告
import warnings
warnings.filterwarnings('ignore')
#加載數(shù)據(jù)
data = pd.read_csv('.../data.csv')
一、seaborn的繪圖風(fēng)格
1、主題樣式
seaborn庫(kù)中有darkgird(灰色背景+白網(wǎng)格)、whitegrid(白色背景+黑網(wǎng)格)、dark(僅灰色背景)、white(僅白色背景)、ticks(坐標(biāo)軸帶刻度)5種預(yù)設(shè)的主題。
個(gè)人推薦whitegrid或white
darkgrid與whitegrid主題有助于在繪圖時(shí)進(jìn)行定量信息的查找
dark與white主題有助于防止網(wǎng)格與表示數(shù)據(jù)的線條混淆
ticks主題有助于體現(xiàn)少量特殊的數(shù)據(jù)元素結(jié)構(gòu)
set_style( )修改主題,默認(rèn)主題為darkgrid
sns.set_style( style = None , rc = None)
set_style函數(shù)只能修改axes_style函數(shù)顯示的參數(shù),axes_style函數(shù)可以達(dá)到臨時(shí)設(shè)置圖形樣式的效果。
x = np.arange(1, 10, 2)
y1 = x + 1
y2 = x + 3
y3 = x + 5
def showLine(flip=1):
sns.lineplot(x, y1)
sns.lineplot(x, y2)
sns.lineplot(x, y3)
pic = plt.figure(figsize=(12, 8))
with sns.axes_style('darkgrid'): # 使用darkgrid主題
pic.add_subplot(2, 3, 1)
showLine()
plt.title('darkgrid')
with sns.axes_style('whitegrid'): # 使用whitegrid主題
pic.add_subplot(2, 3, 2)
showLine()
plt.title('whitegrid')
with sns.axes_style('dark'): # 使用dark主題
pic.add_subplot(2, 3, 3)
showLine()
plt.title('dark')
with sns.axes_style('white'): # 使用white主題
pic.add_subplot(2, 3, 4)
showLine()
plt.title('white')
with sns.axes_style('ticks'): # 使用ticks主題
pic.add_subplot(2, 3, 5)
showLine()
plt.title('ticks')
sns.set_style(style='darkgrid', rc={'font.sans-serif': ['MicrosoftYaHei', 'SimHei'],
'grid.color': 'black'}) # 修改主題中參數(shù)
pic.add_subplot(2, 3, 6)
showLine()
plt.title('修改參數(shù)')
plt.show()
2、元素縮放
set_context( )可以設(shè)置輸出圖形的尺寸,默認(rèn)為None
context參數(shù)可接收paper、notebook、talk、poster類型
paper < notebook < talk < poster
使用set_context函數(shù)只能修改plotting_context函數(shù)顯示的參數(shù),plotting_context函數(shù)通過調(diào)整參數(shù)來改變圖中標(biāo)簽、線條或其他元素的大小,但不會(huì)影響整體樣式
sns.set_context( context = None , font_scale = 1, rc = None )
sns.set()
x = np.arange(1, 10, 2)
y1 = x + 1
y2 = x + 3
y3 = x + 5
def showLine(flip=1):
sns.lineplot(x, y1)
sns.lineplot(x, y2)
sns.lineplot(x, y3)
pic = plt.figure(figsize=(8, 8))
# 恢復(fù)默認(rèn)參數(shù)
pic = plt.figure(figsize=(8, 8), dpi=100)
with sns.plotting_context('paper'): # 選擇paper類型
pic.add_subplot(2, 2, 1)
showLine()
plt.title('paper')
with sns.plotting_context('notebook'): # 選擇notebook類型
pic.add_subplot(2, 2, 2)
showLine()
plt.title('notebook')
with sns.plotting_context('talk'): # 選擇talk類型
pic.add_subplot(2, 2, 3)
showLine()
plt.title('talk')
with sns.plotting_context('poster'): # 選擇poster類型
pic.add_subplot(2, 2, 4)
showLine()
plt.title('poster')
plt.show()
3、邊框控制
despine( )可以移除任意位置的邊框、調(diào)節(jié)邊框的位置、修剪邊框的長(zhǎng)度
sns.despine( fig = None , ax = None , top = True , right = True , left = False , bottom = False , offset = None , trim = False )
參數(shù) | 說明 |
---|---|
top | 接收boolean,表示刪除頂部邊框。默認(rèn)為True |
right | 接收boolean,表示刪除右側(cè)邊框。默認(rèn)為True |
left | 接收boolean,表示刪除左側(cè)邊框。默認(rèn)為False |
bottom | 接收boolean,表示刪除底部邊框。默認(rèn)為False |
offset | 接收int或dict,表示邊框與坐標(biāo)軸的距離。默認(rèn)為None |
trim | 接收boolean,表示將邊框限制為每個(gè)非扭曲軸上的最小和最大主刻度。默認(rèn)為False |
#無(wú)參數(shù)despine()
with sns.axes_style('white'):
showLine()
sns.despine() # 默認(rèn)無(wú)參數(shù)狀態(tài),就是刪除上方和右方的邊框
plt.title('控制圖形邊框')
plt.show()
#邊框與坐標(biāo)軸的距離為10
with sns.axes_style('white'):
data = np.random.normal(size=(20, 6)) + np.arange(6) / 2
sns.boxplot(data=data)
sns.despine(offset=10, left=False, bottom=False)
plt.title('控制圖形邊框')
plt.show()
二、繪制關(guān)系圖
1、散點(diǎn)圖—sns.scatterplot( )
# 加載數(shù)據(jù)
hr = pd.read_csv('../data/hr.csv', encoding='gbk')
# 提取部門為產(chǎn)品開發(fā)部、離職為1的數(shù)據(jù)
product = hr.iloc[(hr['部門'].values=='產(chǎn)品開發(fā)部') & (hr['離職'].values==1), :]
ax = sns.scatterplot(x='評(píng)分', y='每月平均工作小時(shí)數(shù)(小時(shí))', data=product)
plt.title('評(píng)價(jià)分?jǐn)?shù)與平均工作時(shí)間散點(diǎn)圖')
plt.show()
#通過對(duì)點(diǎn)著色和改變標(biāo)記來突顯類別
markers = {'低' : 'o', '中' : 'D', '高' : 's'}
sns.scatterplot(x='評(píng)分', y='每月平均工作小時(shí)數(shù)(小時(shí))',hue='薪資',
style='薪資', markers=markers, data=product)
plt.title('評(píng)價(jià)分?jǐn)?shù)與平均工作時(shí)間散點(diǎn)圖')
plt.show()
2、折線圖—sns.lineplot( )
主要參數(shù):
estimator:接收pandas方法,可調(diào)用函數(shù)、None。表示y在同一x級(jí)別的聚合方法。默認(rèn)為mean
ci:接收int、sd、None,表示使用estimator參數(shù)聚合的置信區(qū)間大小,sd表示數(shù)據(jù)標(biāo)準(zhǔn)差。默認(rèn)為95
# 繪制房間數(shù)和房屋價(jià)格的折線圖
boston = pd.read_csv('../data/boston_house_prices.csv', encoding='gbk')
sns.lineplot(x='房間數(shù)(間)', y='房屋價(jià)格(千美元)', data=boston, ci=0)
plt.title('房間數(shù)與房屋價(jià)格')
plt.show()
# 繪制工齡和評(píng)分折線圖
IT = hr.iloc[hr['部門'].values=='IT部', :]
sns.lineplot(x='工齡(年)', y='評(píng)分', hue='離職', data=IT, ci=0)
plt.title('工齡與上年度評(píng)價(jià)')
plt.show()
3、熱力圖—heatmap( )
plt.rcParams['axes.unicode_minus'] = False
#plt.figure(figsize=(16, 12))
corr = boston.corr() # 特征的相關(guān)系數(shù)矩陣
sns.heatmap(corr)
plt.title('特征矩陣熱力圖')
plt.show()
#添加數(shù)據(jù)標(biāo)記
plt.figure(figsize=(10, 10))
sns.heatmap(corr, annot=True, fmt='.2f')
plt.title('特征矩陣熱力圖')
plt.show()
4、矩陣網(wǎng)格圖—PairGrid( )
PairGrid( )可用于繪制數(shù)據(jù)關(guān)聯(lián)程度的網(wǎng)格圖
PairGrid( )將數(shù)據(jù)集中的每個(gè)變量映射到多個(gè)網(wǎng)格中的列和行,并可以使用不同的繪圖函數(shù)繪制上三角和下三角的雙變量圖,顯示數(shù)據(jù)集中變量的兩兩之間的關(guān)系。
#繪制犯罪率、一氧化氮含量、房間數(shù)與房屋價(jià)格兩兩之間的相關(guān)性網(wǎng)格圖
g = sns.PairGrid(boston, vars=['犯罪率', '一氧化氮含量(ppm)', '房間數(shù)(間)', '房屋價(jià)格(千美元)'])
g = g.map(plt.scatter)
plt.suptitle('矩陣網(wǎng)格圖', verticalalignment='bottom' , y=1)
plt.show()
# 繪制不同顏色的數(shù)據(jù)子集
sell = hr.iloc[(hr['部門'].values=='銷售部') & (hr['離職'].values==1), :]
g = sns.PairGrid(sell,
vars=['滿意度', '評(píng)分', '每月平均工作小時(shí)數(shù)(小時(shí))'],
hue='薪資', palette='Set3')
g = g.map_diag(sns.kdeplot)
g = g.map_offdiag(plt.scatter)
plt.suptitle('不同顏色的矩陣網(wǎng)格圖', verticalalignment='bottom' , y=1)
plt.show()
5、關(guān)系網(wǎng)格組合圖—relplot( )
relplot( )可以實(shí)現(xiàn)統(tǒng)一訪問scatterplot函數(shù)和lineplot函數(shù)以繪制關(guān)系網(wǎng)格組合圖
#繪制單構(gòu)面散點(diǎn)圖
sns.relplot(x='滿意度', y='評(píng)分', hue='薪資',
data=sell)
plt.title('滿意度水平與上年度評(píng)價(jià)')
plt.show()
#繪制網(wǎng)格圖
sns.relplot(x='滿意度', y='評(píng)分', hue='5年內(nèi)升職', row='薪資',
col='工作事故', data=IT)
plt.show()
sns.relplot(x='滿意度', y='評(píng)分', hue='5年內(nèi)升職', col='工作事故',
col_wrap=1, data=IT)
plt.show()
三、繪制分類圖
1、條形圖—barplot( )
from matplotlib import pyplot as plt
import pandas as pd
import seaborn as sns
import math
# 加載數(shù)據(jù)
boston = pd.read_csv('E:/桌面/源代碼+實(shí)驗(yàn)數(shù)據(jù)/第4章/data/boston_house_prices.csv', encoding='gbk')
hr = pd.read_csv('E:/桌面/源代碼+實(shí)驗(yàn)數(shù)據(jù)/第4章/data/hr.csv', encoding='gbk')
# 使用seaborn庫(kù)繪圖
sns.set_style('whitegrid', {'font.sans-serif':['simhei', 'Arial']})
# 設(shè)置中文字體
plt.rcParams['font.sans-serif'] = ['SimHei']
# 設(shè)置正常顯示負(fù)號(hào)
plt.rcParams['axes.unicode_minus']=False
# 繪制各部門人員總數(shù)條形圖
count = hr['部門'].value_counts()
index = count.index
sns.barplot(x=count, y=index)
plt.xticks(rotation=70)
plt.xlabel('部門')
plt.ylabel('總數(shù)')
plt.title('各部門人數(shù)對(duì)比')
plt.show()
2、計(jì)數(shù)圖—countplot( )
#繪制x軸與y軸顯示數(shù)據(jù)的計(jì)數(shù)圖
plt.figure(figsize=(8, 4))
plt.subplot(121) #畫布分成一行二列,該子圖表示為第一個(gè)
sns.countplot(x='工齡(年)', data=hr)
plt.title('x軸顯示數(shù)據(jù)的計(jì)數(shù)圖')
plt.ylabel('計(jì)數(shù)')
plt.subplot(122) #畫布分成一行二列,該子圖表示為第二個(gè)
sns.countplot(y='工齡(年)', data=hr)
plt.title('y軸顯示數(shù)據(jù)的計(jì)數(shù)圖')
plt.xlabel('計(jì)數(shù)')
plt.show()
# 繪制多分類嵌套的計(jì)數(shù)圖
sns.countplot(x='5年內(nèi)升職', hue='薪資', data=hr, palette='Set2')
plt.suptitle('多變量散點(diǎn)圖')
plt.ylabel('總數(shù)')
plt.show()
3、繪制單變量分布圖(直方圖)—distplot( )
#繪制單變量分布圖
sns.distplot(boston['財(cái)產(chǎn)稅'], kde=False)
plt.title('單變量的分布圖')
plt.ylabel('數(shù)量')
plt.show()
4、繪制分類散點(diǎn)圖—stripplot( )、swarmplot( )
(1)stripplot( )
stripplot( )接收多種類型的傳遞數(shù)據(jù),包括列表、Numpy陣列、數(shù)據(jù)框(DataFrame)、序列(Series)、數(shù)組或向量。
主要參數(shù):
jitter:表示添加均勻隨機(jī)噪聲(僅改變圖形)來優(yōu)化圖形顯示。默認(rèn)為True。
#繪制簡(jiǎn)單水平分布散點(diǎn)圖
sale = hr.iloc[(hr['部門'].values=='銷售部') & (hr['離職'].values==1), :]
sns.stripplot(x=sale['每月平均工作小時(shí)數(shù)(小時(shí))'])
plt.title('簡(jiǎn)單水平分布散點(diǎn)圖')
plt.show()
#添加隨機(jī)噪聲抖動(dòng)
hr1 = hr.iloc[hr['離職'].values==1, :]
plt.figure(figsize=(10, 5))
plt.subplot(121)
plt.xticks(rotation=70)
sns.stripplot(x='部門', y='每月平均工作小時(shí)數(shù)(小時(shí))', data=hr1) # 默認(rèn)添加隨機(jī)噪聲
plt.title('默認(rèn)隨機(jī)噪聲抖動(dòng)')
plt.subplot(122)
plt.xticks(rotation=70)
sns.stripplot(x='部門', y='每月平均工作小時(shí)數(shù)(小時(shí))',
data=hr1, jitter=False) # 不添加隨機(jī)噪聲
plt.title('無(wú)隨機(jī)噪聲抖動(dòng)')
plt.show()
#以顏色顯示第二個(gè)分類條件
hr2 = hr.iloc[(hr['薪資'].values=='高') & (hr['離職'].values==0), :]
sns.stripplot(x='5年內(nèi)升職', y='每月平均工作小時(shí)數(shù)(小時(shí))',
hue='部門', data=hr2, jitter=True)
plt.title('前5年是否晉升與平均每月工作時(shí)長(zhǎng)')
plt.show()
#使變量沿分類軸方向分類
plt.figure(figsize=(70, 13))
plt.subplot(211)
plt.xticks(rotation=70)
plt.title('不同部門的平均每月工作時(shí)長(zhǎng)')
sns.stripplot(x='部門', y='每月平均工作小時(shí)數(shù)(小時(shí))', hue='5年內(nèi)升職', data=hr2)
plt.subplot(212)
plt.xticks(rotation=70)
sns.stripplot(x='部門', y='每月平均工作小時(shí)數(shù)(小時(shí))', hue='5年內(nèi)升職',
data=hr2, dodge=True)
plt.show()
(2)swarmplot( )
用stripplot函數(shù)添加隨機(jī)噪聲來增加圖形抖動(dòng)及將變量沿著分類軸繪制后,仍然有重疊的可能。
使用swarmplot函數(shù)可以避免這種情況,swarmplot函數(shù)能夠繪制出具有非重疊點(diǎn)的分類散點(diǎn)圖。
#繪制簡(jiǎn)單的分布密度散點(diǎn)圖
sns.swarmplot(x='部門', y='每月平均工作小時(shí)數(shù)(小時(shí))', data=hr2)
plt.xticks(rotation=70)
plt.title('不同部門的平均每月工作時(shí)長(zhǎng)')
plt.show()
#添加多個(gè)嵌套分類變量
sns.swarmplot(x='部門', y='每月平均工作小時(shí)數(shù)(小時(shí))',
hue='5年內(nèi)升職', data=hr2)
plt.xticks(rotation=30)
plt.title('不同部門的平均每月工作時(shí)長(zhǎng)')
plt.show()
5、繪制增強(qiáng)箱線圖—boxenplot( )
#繪制普通箱線圖與增強(qiáng)箱線圖
fig, axes = plt.subplots(1, 2, figsize=(8, 4))
axes[0].set_title('普通箱線圖')
boston['房間數(shù)(取整)'] = boston['房間數(shù)(間)'].map(math.floor) # 對(duì)房間數(shù)取整
sns.boxplot(x='房間數(shù)(取整)', y='房屋價(jià)格(千美元)',
data=boston, orient='v', ax=axes[0]) # 普通
axes[1].set_title('增強(qiáng)箱線圖')
sns.boxenplot(x='房間數(shù)(取整)', y='房屋價(jià)格(千美元)',
data=boston, orient='v', ax=axes[1]) # 增強(qiáng)
plt.show()
6、繪制分類網(wǎng)格組合圖—pairplot( )
使用分類網(wǎng)格組合圖可繪制出數(shù)據(jù)集中的成對(duì)關(guān)系
#繪制波士頓房?jī)r(jià)的多變量散點(diǎn)圖
sns.pairplot(boston[['犯罪率', '一氧化氮含量(ppm)', '房間數(shù)(間)', '低收入人群', '房屋價(jià)格(千美元)']])
plt.suptitle('多變量散點(diǎn)圖', verticalalignment='bottom', y=1)
plt.show()
#繪制指定分類變量的散點(diǎn)圖
hr3 = sale[['滿意度', '總項(xiàng)目數(shù)', '工齡(年)', '薪資']]
sns.pairplot(hr3, hue='薪資')
plt.suptitle('多變量分類散點(diǎn)圖', verticalalignment='bottom')
plt.show()
四、繪制回歸圖
1、繪制線性回歸擬合圖—regplot( )
from matplotlib import pyplot as plt
import pandas as pd
import seaborn as sns
# 設(shè)置中文字體
sns.set_style('whitegrid', {'font.sans-serif':['simhei', 'Arial']})
# 忽略警告
import warnings
warnings.filterwarnings('ignore')
# 加載數(shù)據(jù)
boston = pd.read_csv('../data/boston_house_prices.csv', encoding='gbk')
#繪制修改置信區(qū)間ci參數(shù)前后的線性回歸擬合圖
fig, axes = plt.subplots(1, 2, figsize=(8, 4))
axes[0].set_title('修改前的線性回歸擬合圖')
axes[1].set_title('修改后的線性回歸擬合圖')
sns.regplot(x='房間數(shù)(間)', y='房屋價(jià)格(千美元)', data=boston, ax=axes[0])
sns.regplot(x='房間數(shù)(間)', y='房屋價(jià)格(千美元)', data=boston, ci=50, ax=axes[1])
plt.show()
2、繪制線性回歸網(wǎng)格組合圖—lmplot( )
#以河流穿行為類別繪制低收入人群與房屋價(jià)格兩個(gè)變量的回歸網(wǎng)格組合圖
sns.lmplot(x='低收入人群', y='房屋價(jià)格(千美元)', col='河流穿行', data=boston)
plt.show()
‘…/data/boston_house_prices.csv’, encoding=‘gbk’)
#繪制修改置信區(qū)間ci參數(shù)前后的線性回歸擬合圖
fig, axes = plt.subplots(1, 2, figsize=(8, 4))
axes[0].set_title(‘修改前的線性回歸擬合圖’)
axes[1].set_title(‘修改后的線性回歸擬合圖’)
sns.regplot(x=‘房間數(shù)(間)’, y=‘房屋價(jià)格(千美元)’, data=boston, ax=axes[0])
sns.regplot(x=‘房間數(shù)(間)’, y=‘房屋價(jià)格(千美元)’, data=boston, ci=50, ax=axes[1])
plt.show()文章來源:http://www.zghlxwxcb.cn/news/detail-673256.html
[外鏈圖片轉(zhuǎn)存中...(img-AgfMs08W-1664038679472)]
### 2、繪制線性回歸網(wǎng)格組合圖—lmplot( )
```python
#以河流穿行為類別繪制低收入人群與房屋價(jià)格兩個(gè)變量的回歸網(wǎng)格組合圖
sns.lmplot(x='低收入人群', y='房屋價(jià)格(千美元)', col='河流穿行', data=boston)
plt.show()
文章來源地址http://www.zghlxwxcb.cn/news/detail-673256.html
到了這里,關(guān)于Seaborn庫(kù)的基本繪圖操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!