Seaborn简介
- seaborn其实是在Matplotlib的基础上进行了更高级的API封装,从而使得作图更容易,一般能满足数据分析90%的绘图需求,更复杂的定义图形,还是要Matplotlib。
#准备工作
import seaborn as sns
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False # 用来正常显示负号
sns.set_style('darkgrid',{'font.sans-serif':['SimHei','Arial']}) #正常显示中文
import warnings
warnings.filterwarnings('ignore') #去除部分警告信息
Seaborn内置数据集
https://github.com/mwaskom/seaborn-data
titanic = sns.load_dataset('titanic',cache=True)
sns.set_style("darkgrid")
plt.bar([1,2,3,4,5],[3,6,9,7,3])
sns.set_style("ticks")
plt.bar([1,2,3,4,5],[3,6,9,7,3])
sns.despine() #去除Seaborn的图脊,默认去除上和右
sns.set_style("ticks")
plt.bar([1,2,3,4,5],[3,6,9,7,3])
sns.despine(left=True,bottom=True)
sns.set_style("ticks")
plt.bar([1,2,3,4,5],[3,6,9,7,3])
sns.despine(left=True,bottom=True)
plt.xticks([])
plt.yticks([])
Seaborn调色板
- 分为连续渐变色板和离散分类色板
- 分类色板主要用color_palette()函数
color_palette()能传入任何Matplotlib所支持的颜色
color_palette()不写参数则为默认颜色
set_palette()设置所有图的颜色 - 6个默认的颜色循环主题:deep,muted,pastel,bright,dark,colorblind
current_palette = sns.color_palette()
sns.barplot([1,2,3,4,5],[3,6,9,7,3])
sns.palplot(current_palette)
sns.palplot(sns.color_palette("Greens",10))
# 一个交互式方法
sns.choose_cubehelix_palette()
柱状图 seaborn.barplot()
x = ['a','b','c','d']
y = [132,342,156,241]
sns.barplot(x,y)
x = ['a','b','c','d']
y = [132,342,156,241]
sns.barplot(x,y,order=['b','d','c','a'])
x = ['a','b','c','d']
y = [132,342,156,241]
sns.barplot(x,y,
orient='v', #纵向显示
saturation=0.25) #色彩饱和度
x = ['a','b','c','d']
y = [132,342,156,241]
sns.barplot(y,x, #交换x,y
orient='h', #横向显示
saturation=0.25)
导入tips数据集
tips = sns.load_dataset("tips")
tips.head()
sns.barplot(x='day',y='tip',data=tips) #竖线代表置信区间,柱体高度代表该类别下所有值的均值
sns.barplot(x='day',y='tip',data=tips,hue='sex')
sns.barplot(x='day',y='tip',data=tips,hue='sex',palette='Reds')
条形图
sns.barplot(y='day',x='tip',data=tips)
sns.barplot(y='day',x='tip',data=tips,hue='sex')
箱线图 boxplot
L = [2,5,1,6,3]
sns.boxplot(x=L)
L = [2,5,1,6,3]
sns.boxplot(y=L)
sns.boxplot(x='day',y='tip',data=tips)
sns.boxplot(x='day',y='tip',data=tips,hue='sex')
小提琴图 violinplot
L=[3,2,0,1,4]
sns.violinplot(L,palette='Reds')
sns.violinplot(x='day',y='tip',data=tips,hue='sex')
sns.violinplot(x='day',y='tip',data=tips,hue='sex',split=True)
分类散点图 strip(带状)图和swarm(蜂群状)图
sns.stripplot(x='day',y='tip',data=tips)
sns.stripplot(x='day',y='tip',data=tips,hue='sex')
sns.swarmplot(x='day',y='tip',data=tips,hue='sex')
分面网格分类图 catplot
sns.catplot(x='day',y='tip',data=tips,hue='sex')
sns.catplot(x='day',y='tip',data=tips,hue='sex',col='time')
sns.catplot(x='day',y='tip',data=tips,hue='sex',col='time',kind='violin',split=True)
散点图 scatterplot
n = 1024
x = np.random.normal(0,1,n)
y = np.random.normal(0,1,n)
sns.scatterplot(x=x,y=y)
plt.title('绘制散点图',fontproperties='SimHei')
sns.scatterplot(x='total_bill',y='tip',hue='sex',data=tips)
plt.figure(dpi=150)
sns.scatterplot(x='total_bill',y='tip',hue='sex',style='time',data=tips)
线图 lineplot
data = {
'apples' : [3,2,0,1],
'oranges' : [0,1,2,3],
'bananas' : [1,2,2,0]
}
df = pd.DataFrame(data, index=['June','Robert','Lily','David'])
sns.lineplot(data=df)
#图一
tips = sns.load_dataset('tips')
tips.head()
plt.figure(dpi=150)
sns.lineplot(x='total_bill',y='tip',data=tips)
#图二
tips = sns.load_dataset('tips')
tips.head()
plt.figure(dpi=150)
sns.lineplot(x='total_bill',y='tip',data=tips,hue='sex')
#图三
tips = sns.load_dataset('tips')
tips.head()
plt.figure(dpi=150)
sns.lineplot(x='total_bill',y='tip',data=tips,hue='sex',size='smoker',style='time')
图一
图二
图三
分面网格关联图 relplot
mpg_df = sns.load_dataset('mpg')
g = sns.relplot(x='displacement',y='mpg',data=mpg_df)
g = sns.relplot(x='displacement',y='mpg',hue='origin',col='cylinders',row='origin',kind='line',data=mpg_df)
Dist图
sns.distplot(tips['total_bill'])
sns.distplot(tips['total_bill'],kde=False) #kde为密度曲线
密度图 kdeplot
sns.kdeplot(tips['total_bill'])
n = 1024
x = np.random.normal(0,1,n)
y = np.random.normal(0,1,n)
g = sns.kdeplot(x,y)
g = sns.kdeplot(x,y,shade=True)
连接图 jointplot
n = 1024
x = np.random.normal(0,1,n)
y = np.random.normal(2,3,n)
g = sns.jointplot(x,y) #默认图
g = sns.jointplot(x,y,kind='reg') #添加线性回归线
g = sns.jointplot(x,y,kind='kde') #设置为密度图
热力图 heatmap
df = pd.DataFrame(np.random.rand(10,10),columns=list('ABCDEFGHIJ'))
sns.heatmap(df)
sns.heatmap(df,cmap='Greens') #设置颜色面板
sns.heatmap(df,cmap='Greens',annot=True) #设置annot参数
线性回归图 regplot
df = sns.load_dataset('tips')
sns.regplot(x='total_bill',y='tip',data=df)
分面网格线性回归图 lmplot
sns.lmplot(x='total_bill',y='tip',data=df)
分面网格绘图
mpg_df = sns.load_dataset('mpg')
g = sns.FacetGrid(mpg_df, col='origin')
g.map(sns.distplot,'mpg')